【发布时间】:2018-08-16 16:32:33
【问题描述】:
我试图将一个模板类放入另一个(包装器)模板类中,而第一个模板类有一个我需要在包装器类中使用的默认参数。这里是:
template <typename A, size_t B, typename C = size_t, bool D = true>
class MyClass;
这个类只能与给定的 2、3 或 4 个参数一起使用:
MyClass<int, char> object1;
MyClass<int, char, uint8_t> object2;
MyClass<int, char, uint8_t, false> object3;
包装类应该像这样使用 MyClass 的任何可能数量的参数来实例化:
Wrapper<MyClass<uint8_t, 210>> firstWrapper;
还有
Wrapper<MyClass<uint8_t, 210, uint8_t>> secondWrapper;
Wrapper<MyClass<uint8_t, 210, uint8_t, false>> thirdWrapper;
包装模板类因此有一个模板模板参数,但在这里我需要参数 C,它并不总是直接给出。我为 Wrapper 类尝试了这两种实现,但它们都不起作用:
变体 A:
// at least 2 parameters do not have a default value
template <template <typename, typename, typename...> class CONTAINER, typename A, typename B, typename... Ts>
class Wrapper<CONTAINER<A, B, Ts...>> {
private:
CONTAINER<A, B, Ts...>& m_container;
C m_index; // < ---- How can I access the (default) parameter C
}
变体 B:
template <template <typename, typename, typename, typename> class CONTAINER, typename A, typename B, typename C, typename D>
class Wrapper<CONTAINER<A, B, C, D>> {
private:
CONTAINER<A, B, C, D>& m_container;
C m_index; // works!
}
但是对于这个变体,我必须指定 MyClass 的所有 4 个模板参数,并且不能只使用 C 和 D 的默认值。
我需要如何修改我的 Wrapper 类,以便它可以处理 MyClass 的 2、3 和 4 个给定模板参数,同时我仍然可以访问第三个参数的默认值?
【问题讨论】:
标签: c++ templates default-arguments