我需要一系列具有可變數量值的初始化函數。我正在使用它們來執行Eigen庫的收集操作。下面是我對每個向量長度的一個模板,做它現在的方式:可變長度初始值設定程序的模板
template<typename T1, typename T2>
inline void gather (Array<T1,4,1> &to, const Array<T2,Dynamic,1> &from, const Array<int,4,1> &index)
{
to << from[index[0]], from[index[1]], from[index[2]], from[index[3]];
}
template<typename T1, typename T2>
inline void gather (Array<T1,6,1> &to, const Array<T2,Dynamic,1> &from, const Array<int,6,1> &index)
{
to << from[index[0]], from[index[1]], from[index[2]], from[index[3]], from[index[4]], from[index[5]];
}
有沒有一種方法,以取代像上面用長度參數參數化的一個模板模板較長列表(4和上面的代碼片段6)?如果是這樣,是否可以使用C++ 11語言規範(我正在使用Visual Studio 2010)?
我想保留逗號分隔值語法,因爲我希望它在某些情況下可能會產生編譯時初始化(常量from
和index
)。雖然我可能在這個假設上是錯誤的。初始化程序列表可以有1到16個值 - 不需要擔心空列表。
我認爲你正在尋找一種方法來做到這一點與自動演繹,是嗎?另外,這是否應該是一個插入鏈(對於<< val << val << val ..)或是所有意圖的逗號? – WhozCraig
逗號是必需的 - 這是Eigen初始化程序的語法。我希望它會產生編譯時初始化。 –
有可能這樣做是在編譯時進行初始化,因爲你正在處理已經初始化的數據。 – Xeo