提问人:edrezen 提问时间:4/3/2023 更新时间:4/3/2023 访问量:121
奇怪的重复模板模式和调用运算符重载 [duplicate]
Curiously recurring template pattern and call operator overload [duplicate]
问:
我正在使用 Curiously Recurring Template Pattern 和调用运算符重载,并且我遇到了无法解释的编译错误。我定义了以下类:
template<class DERIVED>
struct Base
{
void operator() (int n) const {}
void foo (int n) const {}
};
struct Derived : Base<Derived>
{
void operator() (int n, int m) const {}
};
int main()
{
Derived x;
x (1,2); // ok
x (1); // ko -> does not compile
static_cast<Base<Derived>>(x) (1); // ok
x.foo(1); // ok
}
我可以实例化,编译器对 中定义的运算符感到满意,但对 中定义的运算符不满意;我必须强制对类进行static_cast才能使一个 arg 运算符工作。另一方面,调用 时没有问题。x
Derived
Base
Base
foo
为什么一个 arg 重载不能直接在派生
实例上使用?
答:
2赞
Ted Lyngmo
4/3/2023
#1
operator()
in 隐藏基类中的运算符。如果您希望能够调用基类,请将其带入:Derived
operator()
Derived
using
struct Derived : Base<Derived>
{
using Base<Derived>::operator();
评论