我正在考慮以下問題:參數包擴展靜態變量的
讓我們在這樣定義的合併數組合並功能:
// input is (const void*, size_t, const void*, size_t,...)
template<typename...ARGS>
MyArray Concatenation(ARGS...args)
讓我們有幾個結構的靜態性能
struct A { static void* DATA; static size_t SIZE; };
struct B { static void* DATA; static size_t SIZE; };
struct C { static void* DATA; static size_t SIZE; };
我想有一個方法:
template<typename...ARGS>
MyArray AutoConcatenation();
其中ARGS應該與提到的靜態接口結合在一起。 按照方法應該有同樣的輸出:
AutoConcatenation<A, B, C>();
Concatenation(A::DATA, A::SIZE, B::DATA, B::SIZE, C::DATA, C::SIZE);
我的問題是如何實現參數包擴展。
我想:
// not working
template<typename...ARGS>
MyArray AutoConcatenation()
{
return Concatenation((ARGS::DATA, ARGS::SIZE)...);
}
怎麼樣擴張
ARGS::DATA... // Correct expansion of pointers
ARGS::SIZE... // Correct expansion of sizes
(ARGS::DATA, ARGS::SIZE)... // Seems to be expansion of sizes
爲顧問只是信息。我正在尋找執行AutoConcatenation方法,不是爲了它的重新聲明,也不是爲了重新聲明以前的代碼,謝謝。
你是什麼意思*連接*? – Zereges
沒關係。解決方案與函數的語義無關。對於你的信息,如果DATA是c字符串,A :: DATA =「abc」,A :: SIZE = 3,則連接(A :: DATA,A :: SIZE,A :: DATA,A :: SIZE)會與數據「abcabc」和大小爲6的陣列。 – user4663214