我的代码是一个工厂,它根据模板参数的类型创建对象。我想将此扩展到“类型列表”。
这就是我所拥有的: Algo1
定义一个 type 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
定义一个 typedefs 列表 indata
。FASSubscriberFactory::CreateList()
返回一个指向foreach类型列表的指针。请参阅下面的伪代码中的//注释。FASSubscriber<Algo1::indata,..>
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