【发布时间】:2015-08-01 12:32:13
【问题描述】:
我想强制可变参数模板的类型与之前设置的模板类型相同。在下面的示例中,我希望 T 和 U 是同一类型。
#include <iostream>
#include <string>
template<class T>
struct Foo {
Foo(T val) {
std::cout << "Called single argument ctor" << std::endl;
// [...]
}
// How to enforce U to be the same type as T?
template<class... U>
Foo(T first, U... vals) {
std::cout << "Called multiple argument ctor" << std::endl;
// [...]
}
};
int main() {
// Should work as expected.
Foo<int> single(1);
// Should work as expected.
Foo<int> multiple(1, 2, 3, 4, 5);
// Should't work (but works right now). The strings are not integers.
Foo<int> mixedtype(1, "a", "b", "c");
// Also shouldn't work. (doesn't work right now, so that is good)
Foo<int> alsomixedtype(1, 1, "b", "c");
}
【问题讨论】:
-
对于基于
concept的解决方案,请参阅:stackoverflow.com/a/61483494/2085626
标签: c++ templates c++11 variadic-templates