Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;:按类型值列出的模板_C++_Templates - Fatal编程技术网

C++ c++;:按类型值列出的模板

C++ c++;:按类型值列出的模板,c++,templates,C++,Templates,我有一个类a,我想基于布尔值对其进行模板化。如果正确,做某些事情;如果错误,做其他事情 现在B组需要A组作为成员。在B班,我需要一些类似的东西: class B { #ifdef PRODUCT1 static A<true> proxy_; #else static A<false> proxy_; #endif } B类{ #ifdef产品1 静态代理; #否则 静态代理; #恩迪夫 } 我被困在不同的点,我的示例代码如下,它给出了许多我无法理解的错误。谁能帮忙吗

我有一个类a,我想基于布尔值对其进行模板化。如果正确,做某些事情;如果错误,做其他事情

现在B组需要A组作为成员。在B班,我需要一些类似的东西:

class B {
#ifdef PRODUCT1
static A<true> proxy_;
#else
static A<false> proxy_;
#endif
}
B类{
#ifdef产品1
静态代理;
#否则
静态代理;
#恩迪夫
}
我被困在不同的点,我的示例代码如下,它给出了许多我无法理解的错误。谁能帮忙吗

圣殿骑士团

 #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_;
    };
#定义产品1
模板
甲级{
公众:
void init(){
if(T){
有效值=1;
}否则{
有效值=0;
}
}
int有效值;
};
B类{
公众:
模板
静态代理;
};
temp.cpp

#include "templ.h"
#ifdef PRODUCT1
template<> A<bool> B::proxy_<true>;
#else
template<> A<bool> B::proxy_<false>;
#endif


main(){

B::proxy_.init();

}
#include "templ.h"

A<true> B::proxy_;

main(){

B::proxy_.init();

}
#包括“temp.h”
#ifdef产品1
模板A B::代理服务器;
#否则
模板A B::代理服务器;
#恩迪夫
main(){
B::proxy_uz.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;

感谢这两个答案:我进一步优化了它,得到了我想要的。这是给所有人的

圣殿骑士团

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
};
模板
甲级{
公众:
void init(){
if(T)
有效值=1;
其他的
有效值=0;
}
int有效值;
};
B类{
公众:
#ifdef产品1
静态代理;
#否则
静态代理;
#恩迪夫
};
temp.cpp

#include "templ.h"
#ifdef PRODUCT1
template<> A<bool> B::proxy_<true>;
#else
template<> A<bool> B::proxy_<false>;
#endif


main(){

B::proxy_.init();

}
#include "templ.h"

A<true> B::proxy_;

main(){

B::proxy_.init();

}
#包括“temp.h”
代理服务器;
main(){
B::proxy_uz.init();
}

1]我不想让B类成为模板。我可以这样做吗?对不起,我刚才没有提到这件事。2] 我可以将模板专门化合并到一个类中吗?@Pkp已更新,但制作
B
类模板确实是更好的解决方案。多亏了你的两个答案。我不知道我们可以通过值进行专门化(我们在这里是通过true或false进行的),我认为我们可以为特定类型(比如char)编写模板专门化。你能给我指一下讨论这个问题的文档吗?@Pkp搜索“非类型模板参数”。当模板参数是一个类型(
template…
)时,可以为给定的类型专门化它,比如说
char
。这里有一个非类型模板参数(
template
),因此您可以为该参数可以保存的值提供专门化。感谢您提供这些信息。非常有帮助!根本不需要
init()
函数。在
A
的构造函数中初始化
有效。您还应该在
代理
的定义周围添加
#ifdef-#else
,或者做什么