簡體   English   中英

c ++:模板按類型的值

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

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