我想知道调用模板方法的正确语法是什么:
struct print_ch {
print_ch(char const& ch) : m_ch(ch) { }
~print_ch() { }
template<typename T>
void operator()() {
std::cout << static_cast<T>(m_ch) << std::endl;
}
private:
char m_ch;
};
我想出了这样的话:
print_ch printer('c');
printer.operator()<int>();
它似乎有用(GCC 4.5),但是当我在另一个模板化方法中使用它时,例如:
struct printer {
typedef int print_type;
template<typename T_functor>
static void print(T_functor& fnct) {
fnct.operator()<print_type>();
}
};
编译因error: expected primary-expression before '>' token
而失败。任何想法让它正确吗?提前谢谢。
答案 0 :(得分:8)
您必须明确告诉编译器模板operator()
的{{1}}本身就是一个模板:
fnct
如果不使用fnct.template operator()<print_type>();
关键字指定,编译器将假定template
只是一种常规方法,而不是模板。
答案 1 :(得分:2)
由于T_functor本身就是一个模板,编译器(或解析器)假定对它的成员一无所知,所以你必须告诉它你正在使用以下方法调用模板方法:
fnct.template operator()<print_type>();