要有一種鴨子類型的,我做鴨打字C++(通過其非類型模板參數的值專門的模板功能)
template<bool b>
struct A{
static template<typename V> f1(V*, [other params]);
static template<typename V> f2(V*, [other params]);
};
template<> template<typename T>
void A<false>::f1(V*, [other params]){}
template<> template<typename T>
void A<true>::f1(V*, [other params]){
...some code...
}
template<int flags>
struct V{
void f(){
A<flags&Some compile time conditions>::f1 (this,[params]);
A<flags&Some compile time conditions>::f2 (this,[params]);
}
};
你覺得還有一個更優雅的解決方案,這是不是Template class, function specialization (我不想額外PARAM添加到功能)
我想這樣做
template<int X> struct C{
void f(){std::cout<<"C::f"<<std::endl;};
};
template<> struct C<0>{
};
template<int X> struct D{
C<X> c;
template<bool b>
void f();
void g(){
f<X!=0>();
}
};
template<>
template<int X>
void D<X>::f<true>{
c.f();
};
template<int X>
template<>
void D<X>::f<false>{};
int main(){
D<3> ch;
ch.g();
D<0> cn;
cn.g();
}
但這並不是有效的代碼,並我得到錯誤:用作聲明的template-id'f'。
有沒有辦法通過其非類型模板參數的值專門化模板函數?
這可能有助於在main()中給出如何使用D的示例。 –
對不起,主要是我打算使用D.C僅用於做出「可能存在或不存在在那裏「 –