1
我的代碼是一個基於模板參數中的類型創建對象的工廠。我想將其擴展爲「列表」類型。C++模板元編程:如何創建和遍歷模板類中「typedefs」類型的列表。
這是我有: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()
返回Algo1:indata
指針FASSubscriber<Algo1::indata,..>
的foreach類型的列表。請參閱下面的僞代碼中的評論。
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,但我沒有看到任何循環。
感謝 Ĵ
什麼是更好的方式來形容呢?在你的例子中TS是一個類型的集合?那麼預處理器是否爲TS中的每種類型創建了多種類型的CreateList <>? – jaybny
好的,所以...運算符會爲每種類型產生一個新的代碼塊?嗯...有趣。但他們可以共享靜態變量嗎?需要閱讀可變參數模板。 ty – jaybny
@jaybny我更新了它如何「擴展」。是的,請閱讀各種模板,嘗試一下,如果您有任何疑問,請告訴我。 – Pubby