Я пытаюсь создать класс шаблона, который хранит указатель на функцию шаблона, но столкнулся с ошибкой компиляции в Visual Studio 2008. Я создал для него упрощенный тестовый пример (см. ниже), который все еще не скомпилирован в VS2008, но, похоже, успешно скомпилировался в онлайн-компиляторах Comeau и онлайн GCC, которые я пробовал.
Ошибка, которую я вижу, это:
error C2436: 'func' : member function or nested class in constructor initializer list
temp.cpp(21) : while compiling class template member function 'test_class<T>::test_class(T (__cdecl &))'
1> with
1> [
1> T=int (const int &)
1> ]
Работает тот же тест с использованием функции без шаблона. Коротко это, кто-нибудь знает обходной путь для проблемы, или VS2008 ожидает какой-то другой синтаксис для этого?
Спасибо,
Джерри
template<class T>
T template_function(const T& arg)
{
return arg;
}
int non_template_function(const int& arg)
{
return arg;
}
template<class T>
class test_class
{
public:
test_class(const T& arg) : func(arg) {}
private:
T func;
};
template<class T>
void create_class(const T& arg)
{
new test_class<T>(arg);
}
int main()
{
create_class(&template_function<int>); //compile fails unless this is commented out
create_class(&non_template_function);
return 0;
}