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_Explicit Instantiation - Fatal编程技术网

C++ 使用元组显式实例化模板

C++ 使用元组显式实例化模板,c++,templates,explicit-instantiation,C++,Templates,Explicit Instantiation,要显式实例化类模板,我可以执行以下操作: //.h template<typename T> class Foo{}; //.cpp template class Foo<float>; 这很好,因为当从许多地方使用Foo类时,现在只需要实例化一次。是否有可能用预先确定类型的元组显式实例化Foo?假设tuple是std::tuple,我想用它来实例化Foo、Foo和Foo如果你想方便地实例化几个Foo模板类,你可以简单地为它提供一个包装器: template<

要显式实例化类模板,我可以执行以下操作:

//.h
template<typename T>
class Foo{};


//.cpp
template class Foo<float>;

这很好,因为当从许多地方使用Foo类时,现在只需要实例化一次。是否有可能用预先确定类型的元组显式实例化Foo?假设tuple是std::tuple,我想用它来实例化Foo、Foo和Foo

如果你想方便地实例化几个Foo模板类,你可以简单地为它提供一个包装器:

template<typename ...Ts>
class MultiFoo : public Foo<Ts>... {};
template<typename ...>
class MultiFoo;

template<typename ...Ts>
class MultiFoo<tuple<Ts...>> : public Foo<Ts>... {};
这里有一个例子,我添加了自己的元组,这样输出实际上是可见的。对于std::tuple,这种方法应该完全相同

请注意,如果要显式实例化模板,以便它们在其他翻译单元中可见,则需要使用extern关键字。e、 g

extern template class Foo<int>;


问题是,我将类型存储在一个元组中,稍后将进行更改。哦,我明白了。让我试一试。@AndreasLoanjoe添加了元组版本。这导致在另一个翻译单元中使用Foo时无法解析外部符号。它似乎没有显式地实例化Foo,这是个好主意,尽管我还没有尝试过。@AndreasLoanjoe我已经在答案中添加了解决方案。
template class MultiFoo<tuple<int,double, bool>>;
extern template class Foo<int>;
extern template class MultiFoo<int, double, bool>;