如何隐式调用函数调用操作符?

时间:2014-11-11 17:17:25

标签: c++ templates function-call-operator

如何隐式调用类对象的模板函数调用运算符?

class User_Type
{
public:
    template< typename T > T operator()() const;
};

void function()
{
    User_Type user_var;
    int int_var_0 = user_var.operator()< int >(); // explicit function call operator; ugly.
    int int_var_1 = user_var< int >(); // implicit function call operator.
}

g++-4.9 -Wall -Wextra的输出错误是:

    error: expected primary-expression before ‘int’
        auto int_var_1 = user_var< int >();
                                   ^

2 个答案:

答案 0 :(得分:4)

如果需要明确指定模板参数,则不能。指定它的唯一方法是使用第一种语法。

如果模板参数可以从函数参数中推导出来,或者有一个默认值,那么如果你想要那个参数,你可以使用简单的函数调用语法。

根据类型的用途,使类(而不是成员)成为模板可能是有意义的,因此您可以在声明对象时指定参数。

答案 1 :(得分:0)

没有办法。可以使用未使用的参数(如

)作弊
class User_Type
{
public:
    template< typename T > T operator()( T * ) const;
};

void function()
{
    User_Type user_var;
    int int_var_1 = user_var((int*)0); // implicit function call operator.
}

但它不会是你想要的。