调用模板化方法的语法

时间:2010-10-22 19:23:09

标签: c++ templates

我想知道调用模板方法的正确语法是什么:

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而失败。任何想法让它正确吗?提前谢谢。

2 个答案:

答案 0 :(得分:8)

您必须明确告诉编译器模板operator()的{​​{1}}本身就是一个模板:

fnct

如果不使用fnct.template operator()<print_type>(); 关键字指定,编译器将假定template只是一种常规方法,而不是模板。

答案 1 :(得分:2)

由于T_functor本身就是一个模板,编译器(或解析器)假定对它的成员一无所知,所以你必须告诉它你正在使用以下方法调用模板方法:

        fnct.template operator()<print_type>();