[英]c++:templates by value of a type
我有一個類A,我想根據布爾值進行模板化。 如果為true,則執行某些操作;如果為false,則執行其他操作。
現在,B類是需要A類作為成員的類。 在B類中,我需要類似以下內容:
class B {
#ifdef PRODUCT1
static A<true> proxy_;
#else
static A<false> proxy_;
#endif
}
我被困在各個方面,我的示例代碼在下面,它給出了很多我無法理解的錯誤。 誰能幫忙。
templ.h
#define PRODUCT1
template<bool T>
class A {
public:
void init(){
if(T) {
valid_ = 1;
} else {
valid_ = 0;
}
}
int valid_;
};
class B {
public:
template<bool T>
static A<T> proxy_;
};
templ.cpp
#include "templ.h"
#ifdef PRODUCT1
template<> A<bool> B::proxy_<true>;
#else
template<> A<bool> B::proxy_<false>;
#endif
main(){
B::proxy_.init();
}
我認為您正在尋找這個:
template<bool> struct A;
// explicit specializations for true and false
template<> struct A<true>
{ /* whatever */ };
template<> struct A<false>
{ /* whatever */ };
template<bool BParam> struct B
{
static A<BParam> ainstance;
};
// definition of the static data member
template<bool BParam>
A<BParam> B<BParam>::ainstance;
static
實例的定義可以在標頭中,對於模板來說可以。 將此文件包含在您使用B
任何cpp文件中。
如果要使用預處理程序路線而不是將B
設為類模板,請執行以下操作:
struct B
{
#ifdef A_TRUE
static A<true> ainstance;
#else
static A<false> ainstance;
#endif
};
#ifdef A_TRUE
A<true> B::ainstance;
#else
A<false> B::ainstance;
#endif
感謝您提供兩個答案:我進一步優化了它,並得到了我想要的。 這是所有在那里的人的。
templ.h
template<bool T>
class A {
public:
void init(){
if(T)
valid_ = 1;
else
valid_ = 0;
}
int valid_;
};
class B {
public:
#ifdef PRODUCT1
static A<true> proxy_;
#else
static A<false> proxy_;
#endif
};
templ.cpp
#include "templ.h"
A<true> B::proxy_;
main(){
B::proxy_.init();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.