我正在考虑以下问题:参数包扩展静态变量的
让我们在这样定义的合并数组合并功能:
// 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