【发布时间】:2020-04-15 04:25:29
【问题描述】:
这是我的问题,我有一个基类Base,两个派生类ClassA 和ClassB 形式Base 只接受两个参数,还有两个类ClassB0 和ClassB1 派生自@987654327 @ 接受三个参数。我想根据传递给函数create的类型创建类实例,如果类型派生自ClassB,第一个参数将填充10。编译器总是警告没有匹配的构造函数。
#include <iostream>
#include <type_traits>
class Base {};
class ClassA : public Base {
public:
ClassA(int a, int b) : Base() {
std::cout << "ClassA: " << a << " " << b << "\n\n";
}
};
class ClassB : public Base {
public:
ClassB(int a, int b, int c) : Base() {
std::cout << "ClassB: " << a << " " << b << " " << c << "\n";
}
};
class ClassB0 : public ClassB {
public:
ClassB0(int a, int b, int c) : ClassB(a, b, c) {
std::cout << "ClassB0: " << a << " " << b << " " << c << "\n\n";
}
};
class ClassB1 : public ClassB {
public:
ClassB1(int a, int b, int c) : ClassB(a, b, c) {
std::cout << "ClassB1: " << a << " " << b << " " << c << "\n\n";
}
};
template <typename T, typename ...Args>
T* create(Args&&... args) {
T* comp = nullptr;
if (std::is_base_of<ClassB, T>::value) {
std::cout << "True ";
comp = new T(10, std::forward<Args>(args)...);
} else {
std::cout << "False ";
comp = new T(std::forward<Args>(args)...);
}
return comp;
}
int main() {
create<ClassA>(1, 2);
create<ClassB0>(2, 3);
create<ClassB1>(2, 3);
}
【问题讨论】:
标签: c++ templates variadic-templates parameter-pack