Xle*_*lea 2 templates anonymous-types optional-parameters c++11
假设foo是一个采用容器类型的模板,它本身有一个模板参数来指定其值的类型:
template <template<typename val_t> class container_t>
struct foo;
Run Code Online (Sandbox Code Playgroud)
为方便起见,foo应std::vector作为默认容器。问题是std::vector形式上有两个参数,其中第二个有默认值。这意味着... container = std::vector不起作用。
C++11 的解决方案是定义模板别名:
template<typename val_t> using vec_dummy = std::vector<val_t>;
template <template<typename val_t> class container_t = vec_dummy>
struct foo;
Run Code Online (Sandbox Code Playgroud)
我不喜欢,为了可读性(你必须搜索vec_dummy)和审美原因(没有理由命名那种类型)。
有没有办法以某种方式匿名定义模板别名?其他解决问题的方法当然也受到热烈欢迎。
PS:实际上,foo使用内部数据类型作为提供的容器的值类型,所以
template <typename container_t = std::vector<int>> struct foo;
Run Code Online (Sandbox Code Playgroud)
不是一个选择。
您可以制作container_t一个可变参数模板模板参数(shiver)。
template <template<typename val_t, typename...> class container_t = std::vector>
struct foo;
Run Code Online (Sandbox Code Playgroud)
这样你就可以专注于值类型,但仍然维护任何分配器模板参数等。
| 归档时间: |
|
| 查看次数: |
815 次 |
| 最近记录: |