具有非类型模板参数的构造函数

阿列克谢库兹敏

这个问题中,它指出不可能直接使用类构造函数的模板参数,因为如果你写类似的东西

struct S{
    template<typename T>
    S() { ... }
}

那么你就没有办法调用这个构造函数了。但是,有一些变通方法可以使此工作正常进行,例如,通过模板参数推导。

但是我知道的所有这些解决方法都仅适用于类型参数。所以,问题是

是否有任何解决方法可以使非类型模板参数工作?

struct S{
    template<int x>
    S() { ... }
}

我对应该在现代 C++(C++17 标准,包括所有 TS)中工作的解决方案感兴趣,因为这是一个理论问题而不是实际问题。

巴里

但是我知道的所有这些解决方法都仅适用于类型参数

没有一种解决方法是特定于类型的 - 重点是在构造函数中粘贴一些可以推断的东西。所以如果我们想要一个类型,我们会做这样的事情:

template <class T> struct tag { };

struct S {
    template <class T>
    S(tag<T>);
};

如果我们想要一个int,我们做同样的事情:

template <int I> struct val { };

struct S {
    template <int I>
    S(val<I>);
};

对于值,您甚至不需要提出自己的标签类型 - 您可以在std::integral_constant.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章