簡體   English   中英

如何在編譯時檢測重載重要模板的函數?

[英]How to compile-time detect functions that overloaded important template?

假設我們有一個模板:

template <class T>
void VeryImportantFunction(T t) {
    // something
}

它在某處被稱為:

// ..
int a = 12345;
VeryImportantFunction(a);
// ..

這是一個非常龐大的項目,帶有大量的源代碼,有時在代碼深處的某個地方會出現一個帶有重載功能的新標頭:

void VeryImportantFunction(int t) {
    // totally another behavior
}

並且上面的代碼片段將調用重載函數,因為它具有更高的優先級。

我們可以以某種方式禁用或以其他方式禁用編譯時檢測函數,這些函數可能會使我們的重要模板過載?

您的問題尚不清楚,但這是我的看法。


如果要避免模板重載,則可以通過顯式指定模板參數來簡單地調用該函數:

int a = 12345;
VeryImportantFunction<int>(a);

如果你想這在將來再次發生,然后做出VeryImportantFunction無論是拉姆達或struct -那些不能被“外部”載:

inline const auto VeryImportantFunction = [](auto x){ /* ... */ };
// no one can overload this!

如果您想在沒有外部工具的情況下了解VeryImportantFunction所有重載,請以完全錯誤的方式進行調用-編譯器錯誤可能會顯示所有考慮的重載:

VeryImportantFunction(5, 5, 5, 5); 
// error... will likely show all candidates

inline void VeryImportantFunction(int t)
{ 
    VeryImportantFunction<int>(t); // call the template function
}

在模板定義之后。

然后,如果有人編寫了自己的void VeryImportantFunction(int t) ,則會出現編譯器錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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