gpt4 book ai didi

C++ 模板元编程 : how to create and iterate over list of types that are "typedefs" in template class.

转载 作者:太空宇宙 更新时间:2023-11-04 12:01:44 27 4
gpt4 key购买 nike

我的代码是一个根据模板参数类型创建对象的工厂。我想将其扩展为“类型列表”。

这是我的: Algo1 定义了一个类型 indata . FASSubscriberFactory::Create() 返回指向 FASSubscriber<Algo1::indata,..> 的指针 。看这里:

struct Algo1  
{
typedef DataType1 indata;
}

template <class T, class FEED = T::indata, class PROC = typename ProcessorFactory<T>::ptype>
struct FASSubscriberFactory
{
typedef FASSubscriber<typename PROC , typename FEED > fftype;

static fftype * Create()
{
return new fftype(FASConfig::Data2Feed<FEED>::name, ProcessorFactory<T>::Create());
}
}

void main()
{
auto myFASSubscriber4Algo1 FASSubscriberFactory<Algo1>::Create();
}

这就是我想要的: Algo1 定义 typedef 列表 indata . FASSubscriberFactory::CreateList() 返回指向 FASSubscriber<Algo1::indata,..> 列表的指针 foreach 输入 Algo1:indata 。请参阅下面伪代码中的//注释。

struct Algo1 
{
//Want to define a list of types
typedef std::list<types> indata = { DataType1, DateType2 }
}

template <class T, class FEEDs = T::indata, class PROC = typename ProcessorFactory<T>::ptype>
struct FASSubscriberFactory
{
//want to create a list FASSubscribers from list of types T::indata
typedef list<FASSubscriber<PROC, FEEDs::type> listoffftypes
static lisoftypes * CreateList()
{
listoffftypes mylot();

//for each type in FEEDs - want to lopp around list of types
foreach(feedtype in FEEDs )
{
mylot.push(Create<feedtype>());
}
return mylot;
}

template <class FEED>
static fftype * Create()
{
typedef FASSubscriber<typename PROC , typename FEED > fftype;

return new fftype(FASConfig::Data2Feed<FEED>::name, ProcessorFactory<T>::Create());
}
}

void main()
{
auto myListOfFASSubscriber4Algo1 FASSubscriberFactory<Algo1>::Create();
}

我真正想要的是一种定义和迭代模板参数类中定义的“类型列表”的方法。看了一下 A. Alexa 的 TYPELISTS,但我没有看到任何循环。

谢谢j

最佳答案

我有一种感觉,C++11 中的可变参数模板和 std::tuple 就是您想要的,尽管我不确定我是否理解您的要求。

// returns a tuple of pointers created by a Create for each type in the parameter pack
template<typename... TS>
static std::tuple<TS*...> CreateList() {
return { Create<TS>()... };
}

请不要用普通的 C++ 代码来描述模板元编程;这令人困惑。


例如,如果你这样调用它:

FASSubscriberFactory</* stuff */>::CreateList<int, float, foo, bar>()

它本质上是这样做的:

static std::tuple<int*, float*, foo*, bar*> CreateList() {
return { Create<int>(), Create<float>(), Create<foo>(), Create<bar>() };
}

关于C++ 模板元编程 : how to create and iterate over list of types that are "typedefs" in template class.,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13855976/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com