簡體   English   中英

為什么我得到錯誤operator()不能重載?

[英]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);
}

這些錯誤僅在第一個模板參數Tvoid 我想知道我做錯了什么以及為什么我不能以這種方式重載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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM