[英]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
那么你有兩個函數定義與完全相同的原型 - 打破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)) {}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.