为什么我无法使错误操作员()无法超载
Why am I getting the error operator() cannot be overloaded?
我有两个 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()
?
好吧,如果 T
是 void
,那么您有两个函数定义,具有完全相同的原型 - breaking 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)) {}
};
相关文章:
- 二进制超载操作员=
- GLM超载操作员用于地图不起作用
- 使用超载操作员可以实现另一个操作员超载
- 超载操作员|用于固定尺寸的数组
- 超载<<操作员意外行为?
- 实施超载操作员的麻烦
- 如何超载操作员 如果调用对象不是类对象
- 如何使用向量将类对象存储在超载操作员中
- 在课堂上超载I/O操作员的奇怪行为
- 超载操作员 *
- 超载操作员&lt;&lt; - 必须是二进制操作员
- 超载操作员 仅适用于类的特定情况
- AT()和超载操作员[] C 之间的差异
- 为什么我不能超载 *操作员
- 多个操作数,用于超载 *操作员
- MINGW中的全局超载操作员新/删除
- 超载操作员问题C++
- C 超载操作员问题
- 当我使用STL集时,我应该超载==操作员吗?
- C 我应该超载操作员