我想你已经看到了这个特殊的功能:
template<typename T> void print(const T& cont){
for (auto &i: cont)
std::cout << i << " ";
std::cout << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
它打印几乎所有类型的容器,如std::list. 现在我想创建一个打印(例如)3D 的std::vector,看看这个幻想:
template<typename T1, typename T2> void print(const T1<T2>&);
Run Code Online (Sandbox Code Playgroud)
但这当然不是模板的工作方式。怎么做?同样重要的是:在 c++17 和 pre-c++17 中这样做有什么区别吗?
我试图创建一个具有std::bitsetin的类,另一个类应该将它作为参数并创建一个从类中std::array获取 的大小std::bitset。像这样:
template<size_t size>
class Individual{
public:
std::bitset<size> data;
};
template<typename Ind>
class Process {
public:
Process() = default;
std::array<OtherType, Ind::data.size()> individuals;//Size of array must be the size of the bitset!
};
Run Code Online (Sandbox Code Playgroud)
但是当然这不起作用(您可以猜到,因为data不是静态的)。如何从第二个类中获取 the 的大小std::bitset并将其放入std::array?