我有一个接受操作符对象作为参数的函数。这个操作符有点像回调。这个操作符对象的类型是一个模板参数。我怎样才能为它指定一个默认参数?模板函数的默认参数
#include <iostream>
template<class IT, class NT>
class A
{
public:
class DefaultHandler
{
public:
NT foo() { return NT(); }
};
template <class HANDLER>
void action(HANDLER h = DefaultHandler()) // This default parameter is accepted by the compiler but appears to have no effect
{
std::cout << h.foo() << std::endl;
}
};
int main()
{
A<int, double> a;
// I want this to be legal:
a.action(); // error: no matching function for call to ‘A<int, double>::action()’
//a.action(A<int, double>::DefaultHandler()); // Works
return 0;
}
不幸的是,C++ 03 14.8.2.4/17说: '模板类型参数不能从函数默认参数的类型“。 因此需要一些解决方法,如_iammilind_的答案。 –
@Ise紫藤,完全回答我的问题,并以答案的形式表达,我会接受它。 – Adam
真的吗?谢谢,我会尝试! –