[英]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.