可以显式指定操作符的模板参数吗?

Can I explicitly specify template arguments for an operator?

本文关键字:参数 操作符      更新时间:2023-10-16

我有一个类Foo:

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

T不能被推导出来,但是我想要的是能够说一些类似

的东西
Foo foo;    
type_t bar = foo <type_t> ();

但是这是一个语法错误。

有办法做到这一点吗?(或者可能有更好的方式传递类型而不提供类型的实例?)

您可以使用操作符名称语法:

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

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

  1. 更改操作符,使其接受形参,从而类型可演绎。

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

下面是一个编译和运行的示例:

struct Foo {
    template <typename T>
    T* operator () () {
        return (T*) 0;
    }
};
int main()
{
    double* bar = Foo().operator()<double>();
}

但是真的很丑。这是一个明显的操作符重载滥用案例。考虑使用普通的函数名。操作符重载应该使代码读起来更快,而不是相反。