小编A A*_*laa的帖子

c ++ 17通过生成预先声明的类型列表的笛卡尔积来制作std :: variant

假设我有一个三个模板类型参数的类.

template<typename Transformer, typename Criteria, typename Strategy>
struct ConfiguredPipeline {};
Run Code Online (Sandbox Code Playgroud)

并在以后的实例化中使用以下类ConfiguredPipeline:

template<typename...>
struct CriteriaList
{
};
using SupportedCriteria = CriteriaList<ChiSquared, Cosine>;

template<typename...>
struct StrategiesList
{
};
using SupportedStrategies = StrategiesList<Voting>;

template<typename...>
struct TransformerList
{
};
using SupportedTransformer = TransformerList<AAGrouper11, AAGrouper15>;
Run Code Online (Sandbox Code Playgroud)

我怎样才能生成std::variant相当于:

using PipelineVariant = std::variant< 
ConfiguredPipeline< ChiSquared , Voting , AAGrouper11 > ,
ConfiguredPipeline< ChiSquared , Voting , AAGrouper15 > ,
ConfiguredPipeline< Cosine , Voting , AAGrouper11 > ,
ConfiguredPipeline< Cosine , Voting , AAGrouper15 >>; …
Run Code Online (Sandbox Code Playgroud)

c++ templates template-meta-programming variadic-templates c++17

6
推荐指数
1
解决办法
280
查看次数