Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.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

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++_Templates - Fatal编程技术网

C++ 如何将参数传递给模板参数

C++ 如何将参数传递给模板参数,c++,templates,C++,Templates,我尝试这样做: A类: template < typename T1, typename T2 = int > class ClassA {}; 模板 类别a{}; ClassB使用ClassA作为存储实现: template < typename T, template < typename = T, typename = int > class Storage = ClassA > class ClassB : public Storage<

我尝试这样做:

A类:

template < typename T1, typename T2 = int >
class ClassA {};
模板
类别a{};
ClassB使用ClassA作为存储实现:

template 
<
 typename T,
 template < typename = T, typename = int > class Storage = ClassA
>
class ClassB : public Storage<T> {};
模板
<
类型名T,
模板类存储=ClassA
>
B类:公共存储{};
现在我可以创建ClassB的一个实例:

ClassB<double>          myClass;    // Ok, using ClassA (implicit) with <double,int> (implicit)
ClassB<double,ClassA>  myClass2;    // Ok, using ClassA (explicit) with <double,int> (implicit)
ClassB<double,ClassA<double,int>> myClass3; // Not ok, can't using ClassA (explicit) with <double,int> (explicit)
ClassB myClass;//好的,使用ClassA(隐式)和(隐式)
类别B myClass2;//好的,使用ClassA(显式)和(隐式)
类别B myClass3;//不正常,无法将ClassA(显式)与(显式)一起使用

如何将ClassB的存储(ClassA)参数化?

您可以将它们放在一个单独的参数中
ClassA
已经是一个类型,因此不能用于模板参数

template<typename T,
         template <typename, typename> class Storage = ClassA,
         typename StorageT1 = T,
         typename StorageT2 = int>
class ClassB : public Storage<StorageT1, StorageT2> {};

ClassB<double> myClass;
ClassB<double, ClassA> myClass2;
ClassB<double, ClassA, double, int> myClass3;
模板
B类:公共存储{};
B类myClass;
B类myClass2;
B类myClass3;

谢谢您的回答。没有其他解决办法吗?这看起来像模板参数3。和4是B类的,但他们是专门的ClassA@jisaak:否。此选项或使ClassA具有默认参数,并在第二种情况下使用
ClassB