dod*_*ndi 5 c++ templates template-templates variadic-templates c++11
我需要声明一个可以存储不同类型容器的类.即如果它可以处理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;
};
Run Code Online (Sandbox Code Playgroud)
编译器抱怨N/2不是类型.显然,对于std :: array和std :: bitset,我需要将大小作为最后一个模板参数......是否有可能编码这种疯狂?
谢谢!
编辑:就我而言,主要问题是可变参数模板只能在右侧扩展,因此可变参数必须是最后一个.任何人都知道是否有任何计划允许在C++ 17中使用以下语法?
template<typename... Args, typename T>
struct A
{};
Run Code Online (Sandbox Code Playgroud)
Anton 的答案可以通过使用模板模板参数来减少容器特定性ResizedContainer:
namespace detail {
template<typename Container>
struct ResizedContainer;
template<template<typename,std::size_t> class Container,
typename T, std::size_t N>
struct ResizedContainer<Container<T,N>> {
using type = Container<T,N/2>;
};
template<template<std::size_t> class Container,
std::size_t N>
struct ResizedContainer<Container<N>> {
using type = Container<N/2>;
};
}
#include <array>
#include <bitset>
template<typename Container>
class Base_Class {
typename detail::ResizedContainer<Container>::type container;
};
int main() {
Base_Class<std::array<int,4>> a;
Base_Class<std::bitset<5>> b;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
418 次 |
| 最近记录: |