【发布时间】:2011-08-20 11:23:07
【问题描述】:
是否有可能在构造时以某种方式将静态初始化列表“传递”给容器包装类,然后依次初始化其成员?
struct bar {
bar(void * ptr): ptr(ptr) {}
void * ptr;
};
template<class T, int N>
struct foo
{
foo( args ) :store(args) {} // here the arg list should be passed
T store[N];
};
int main()
{
bar b[2]={NULL,NULL};
foo<bar,2> f(NULL,NULL); // This should be possible
}
很遗憾,我无法使用 STL 或 Boost。
让我解释一下,如果您怀疑它的用处。首先,这是一个非常“成熟”的设置。解释整个设置不足以在此处发布,也无济于事。想象一个例子,你有一个嵌套的表达式模板树,你在编译时遍历它并收集涉及的对象并将它们存储在像上面这样的容器包装器中。如果您还有其他问题,请询问。
已编辑:T 的默认构造函数应该不被调用。
【问题讨论】:
-
C++0x 让这一切变得简单。不过我会尝试 C++98 的答案
-
谢谢!抱歉,我不能使用 c++0x。
-
stackoverflow.com/questions/161790/… 他们在那里谈论一个 const 数组,但这是相同的潜在问题
-
我认为你不能/不会通过使
store成为指针数组来添加间接级别? -
“很遗憾,我不能使用 STL 或 Boost。” - 为什么?这听起来很愚蠢。这就像使用 C# 并且无法使用
String类。或者实际上是所有 .NET 框架。