gpt4 book ai didi

c++ - 为什么我收到错误 operator() cannot be overloaded?

转载 作者:太空狗 更新时间:2023-10-29 20:15:12 25 4
gpt4 key购买 nike

我有两个重载 operator() ,一个接受函数引用的函数引用,该函数引用将任何类型作为其参数并返回任何类型。另一个采用函数引用,该函数引用采用任何类型作为其参数但返回 void .在实例化我的类时,出现以下错误:

In instantiation of 'A<void, int>':
error: 'void A<T, F>::operator()(void (&)(F)) [with T = void, F = int]' cannot be overloaded
error: with 'void A<T, F>::operator()(T (&)(F)) [with T = void, F = int]'

template <typename T, typename F> struct A {
void operator()(T (&)(F)) {}
void operator()(void (&)(F)) {}
};

void f(int) {}

int main() {

A<void, int> a;
a(f);
}

这些错误仅在第一个模板参数 T 时发生是void .我想知道我做错了什么以及为什么我不能重载 operator()这条路?

最佳答案

好吧,如果 Tvoid 那么你有两个具有完全相同原型(prototype)的函数定义 - 打破了 ODR。

尝试专门化你的结构来防止这种情况:

template <typename T, typename F> struct A {
void operator()(T (&)(F)) {}
void operator()(void (&)(F)) {}
};

template <typename F> struct A<void, F> {
void operator()(void (&)(F)) {}
};

关于c++ - 为什么我收到错误 operator() cannot be overloaded?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14011399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com