如何檢查某個類型是否在某個.cpp
中是完整類型?if-else取決於T是否是一個完整的類型
template<class T>class Test{
//some fields
void(*functor)(T*) =[](T*){};
//^ will be written by some .cpp that can access T as complete-type
T* t=nullptr;
void fComplete(){
delete t; //faster
/**^some code that use complete type*/
}
void fForward(){
functor(t); //slower
/**^some code that forward declaration is enough*/
}
void f(){
/*if(T is complete type){
fComplete();
}else fForward();*/
}
};
時,我想過早優化刪除功能,在我的自定義智能指針,將是有益的。
任何人都可以確認這是不可能的嗎?
我不是要求解決方法(但我不介意) - 這個問題只是我的好奇心。
我希望這可以工作,但可惜它不... https://ideone.com/nEGsZu – Curious
你可以根據類型是否完整來做工作,但你的模板必須總是評估相同的事情,或將有違反ODR。 –
如果您與您一起評估類型不完整的特質,那麼在所有翻譯單位中,您的特質必須導致相同的結果。 –