我可以为运营商明确指定模板参数吗?

时间:2014-03-14 17:11:11

标签: c++

我有Foo类:

class Foo {
    template <typename T>
    T* operator () (void) {
        return (T*) something;
    }
}

T无法推断,但我想要的是能够说出类似

的内容
Foo foo;    
type_t bar = foo <type_t> ();

但这是语法错误。

有办法做到这一点吗? (或者在没有提供类型实例的情况下传递类型的更好方法?)

2 个答案:

答案 0 :(得分:6)

您可以使用运营商名称语法来执行此操作:

type_t *bar = foo.operator() <type_t> ();

那当然很难看。有两种解决方案:

  1. 更改运算符以使其采用参数,因此类型可以自省。

  2. 将其从操作符更改为命名函数。无论如何,它似乎不是operator()的典型用途。

答案 1 :(得分:2)

这是一个编译和运行的例子:

struct Foo {
    template <typename T>
    T* operator () () {
        return (T*) 0;
    }
};

int main()
{
    double* bar = Foo().operator()<double>();
}

但那真的丑陋。这是一个明显的操作员超载滥用案例。考虑使用普通的函数名称。运算符重载应该使代码更快阅读,而不是相反。