2013-03-23 3 views
0

Мне интересно, можно ли иметь параметр функции и не заботьтесь о его типе. Например, у меня есть класс с override < < оператор. Единственное, что она делает, однако, добавить к частному параметров ostringstream:Обобщенный параметр

CLog& CLog::operator <<(const char * txt) { 
    buffer << txt; 
    return *this; 
} 

Однако это только позволяет мне писать константный символ в буфер. Мне нужен параметр, который должен быть любого типа. ostringstream << принимает. Это возможно?

ответ

5

Вы можете использовать шаблоны:

template <typename T> 
CLog& CLog::operator <<(const T& p) { 
    buffer << p; 
    return *this; 
} 
1

Это можно сделать с помощью шаблонов:

template <class T> 
Clog& Clog::operator <<(const T& t) { 
    buffer << t; 
    return *this; 
} 
1

Вы можете использовать template в этом случае.

template<class T> 
CLog& Clog::operator <<(const T& value) { 
    buffer << value; 
    return *this; 
} 

Убедитесь, что вы что-нибудь, что это недопустимо для ofstringstream, хотя и не пройти.

+0

Wow. 3-секундные различия между 3 почти идентичными ответами. : v Я не вижу этого очень часто на других форумах, на которых я болтаюсь. –

0

Другой ответ в основном правильный, но они не поддерживают операции перемещения. Использовать

template <typename T> 
CLog& CLog::operator <<(T&& p) { 
    buffer << std::forward<T>(p); 
    return *this; 
} 
Смежные вопросы