0
我想写一个帮助器结构来测试类的静态条件。如果条件为真,则应该在堆中分配一个对象,并且指向该对象的指针应该返回到std :: vector。C++ variadic模板委托循环错误
这些对象的样子:
class BASE {
public:
virtual void func() = 0;
};
class A : public BASE {
public:
const static int I = 0;
void func() {
std::cout << "CLASS A" << endl;
}
};
class B : public BASE {
public:
const static int I = 1;
void func() {
std::cout << "CLASS B" << endl;
}
};
限位结构:
template<class... R>
struct cond {};
template<class T, class... R>
struct cond<T, R...> : cond<R...> {
cond(vector<BASE *> &_b) : cond(_b) {
if(T::I == 1)
_b.emplace_back(new T());
}
};
,并在主函数的地方:
std::vector<BASE *> b;
cond<A, B> t(b);
for(auto *x : b) {
x->func();
}
理论上在COND结构的构造应调用它的父类的构造函数,但C++ 11还引入了一个特性来在constru中调用构造函数ctors(代表团)。因此,编译器接缝认为我想调用构造函数在同一个班级,造成此错误:
./main.cpp:83:34: error: constructor for 'cond' creates a delegation cycle [-Wdelegating-ctor-cycles]
简单的移动矢量到全球范围,删除构造函数参数的作品,但我会prefere的其他解。
是否有可能告诉编译器以某种方式解释cond(_b)的权利?
这导致了这个错误:'./main.cpp:83:34 :错误:没有匹配的构造函数用于初始化'cond <>''(使用Clang,但不能用于GCC) – Mense 2014-11-20 21:03:08
@Mense - 这是正确的,因为“tail”类没有构造函数。你需要添加一个。我用这些信息编辑了答案。 – 2014-11-20 21:11:26
谢谢;现在工作。 – Mense 2014-11-20 21:16:06