【发布时间】:2015-06-08 09:14:28
【问题描述】:
我需要声明一个可以存储不同类型容器的类。即如果它能够处理 std::bitset 和 std::array 那就太好了。 但是,这两个类需要不同的模板参数...... 是否可以(并且可能,如何)使用模板化模板类和可变参数模板来声明这种类?
示例(但错误):
template<template <typename..., std::size_t> class Container,
std::size_t N,
typename... Args>
class Base_Class
{
...
Container<Args..., N/2> container;
};
编译器抱怨 N/2 不是一个类型。显然,对于 std::array 和 std::bitset 我都需要将大小作为最后一个模板参数...是否可以编写这种疯狂的代码?
谢谢!
编辑: 就我而言,主要问题是可变参数模板只能在右侧展开,因此可变参数必须是最后一个。任何人都知道是否有计划在 C++17 中允许以下语法?
template<typename... Args, typename T>
struct A
{};
【问题讨论】:
-
g++ 和 clang 都会出错(显然是 -std=c++11/14 参数)
标签: c++ templates c++11 variadic-templates template-templates