2013-07-11 3 views
4

Предположим, я хочу создать функцию, которую 0 передаю, но я не знаю, является ли это int или string, или ....Функция, которая принимает все типы аргументов

Так что-то вроде:

void print(info) { 
    cout << info; 
} 

print(5); 
print("text"); 
+0

Вскоре вы могли бы технически написать, что, как 'автопечати = [] (Уст авто и информация) {соиЬ << информации;};' Я не думаю, что функция версия будет в C++ 14, но это уменьшило бы его до типа '[] print (const auto & info) {cout << info;}'. – chris

ответ

3

Один вариант заключается в использовании шаблона функции.

template<typename Arg> 
void print(const Arg& arg) 
{ 
    std::cout << arg; 
} 
+0

Почему «Arg &&», между прочим? – Ryan

+4

Функциональный шаблон - правильный термин. @minitech, это идеальная идиома пересылки, но 'const &' будет более уместным здесь, потому что аргумент не изменяется и нет 'std :: forward'. – Potatoswatter

+0

@Potatoswatter К сожалению. Совершенно верно! Спасибо, что указали, что « –

8

Вы можете сделать это с помощью шаблона функции:

template <typename T> 
void print(const T& info) 
{ 
    std::cout << info ; 
} 
+0

Следует заметить, что эта функция широко открыта для * любого * типа вообще, даже определенного пользователем. Поэтому ваша задача - убедиться, что 'info' может быть аргументом' std :: ostream :: operator << '. – Shoe

+0

@ Джэффри хороший момент, спасибо, что указали это. – taocp

2

Мы могли бы использовать шаблон, чтобы закончить это.

template <typename T> 
void print(const T& t) 
{ 
    std::cout << t <<std::endl; 
} 

int main() 
{ 
    print(12); 
    print("123456"); 
} 
Смежные вопросы