У меня есть этот шаблон класса:
template<class... T>
class Test {
std::vector<TestCase*> test_cases;
public:
Test() {
// Here, for each T an instance should be added to test_cases.
test_cases.push_back((new T)...);
}
};
Это отлично работает для одного аргумента шаблона, но для нескольких аргументов я получаю эту ошибку:
error: too many arguments to function call, expected 1, have 2
Как я могу использовать вариативные шаблоны с new
таким образом? Каков правильный синтаксис?
РЕДАКТИРОВАТЬ: я думаю, что мой вопрос был не совсем ясен. Я хочу вот что:
Test<TestCase1, TestCase2, TestCase3>;
// The constructor will then be:
test_cases.push_back(new TestCase1);
test_cases.push_back(new TestCase2);
test_cases.push_back(new TestCase3);
Мой компилятор clang 163.7.1 с этим флагом: -std=c++0x
.
std::vector<T*> test_cases;
выглядит странно, так как T содержит более одного типа. - person Flexo   schedule 18.09.2011T
является подклассомTestCase
(поэтому я использую указатели). Я изменю это. - person   schedule 18.09.2011test_cases.push_back(new T())...;
. - person Kerrek SB   schedule 18.09.2011vector<void*>
):int
,double
иchar
не имеют общего базового класса. - person Konrad Rudolph   schedule 18.09.2011