我有Foo类:
class Foo {
template <typename T>
T* operator () (void) {
return (T*) something;
}
}
T无法推断,但我想要的是能够说出类似
的内容Foo foo;
type_t bar = foo <type_t> ();
但这是语法错误。
有办法做到这一点吗? (或者在没有提供类型实例的情况下传递类型的更好方法?)
答案 0 :(得分:6)
您可以使用运营商名称语法来执行此操作:
type_t *bar = foo.operator() <type_t> ();
那当然很难看。有两种解决方案:
更改运算符以使其采用参数,因此类型可以自省。
将其从操作符更改为命名函数。无论如何,它似乎不是operator()
的典型用途。
答案 1 :(得分:2)
这是一个编译和运行的例子:
struct Foo {
template <typename T>
T* operator () () {
return (T*) 0;
}
};
int main()
{
double* bar = Foo().operator()<double>();
}
但那真的丑陋。这是一个明显的操作员超载滥用案例。考虑使用普通的函数名称。运算符重载应该使代码更快阅读,而不是相反。