gpt4 book ai didi

c++ - 类模板和多参数包的模板参数推导

转载 作者:太空狗 更新时间:2023-10-29 20:54:12 26 4
gpt4 key购买 nike

在 C++17 中,类模板的模板参数将或多或少地被推导,就像现在函数模板所发生的那样。
Here是相关论文。

以上述论文为例:

template<class ... Ts> struct X { X(Ts...) };
X x1{1}; // OK X<int>
X x11; // OK X<>

当推导发生时,函数模板还有另一个有趣的特性。
考虑以下代码:

template<typename... U, typename... T>
auto func(T&&...) {}

// ...

// U is int, char - T is int, double
func<int, char>(0, .0);

我们可以有两个参数包,只要推导有助于区分它们。
无需将它们包装在元组或其他结构中。

是否可以对类模板做同样的事情?

举个例子:

template<typename... U, typename... T>
struct S {
S(T&&...) {}
};

// ...

// U is int, char - T is int, double
S<int, char> s{0, .0};

论文包含以下示例:

template<class ... Ts> struct X { X(Ts...) };
X<int> x3{1, 'a', "bc"}; // OK X<int,char,const char*>

无论如何,这不是完全一样的东西,我不确定它是否会被允许。

最佳答案

这个:

template<typename... U, typename... T>
struct S { ... };

根据 [temp.param] 只是格式错误:

If a template-parameter of a primary class template, primary variable template, or alias template is a template parameter pack, it shall be the last template-parameter.

这个案例:

template<class ... Ts> struct X { X(Ts...) };
X<int> x3{1, 'a', "bc"}; // OK X<int,char,const char*>

X<int> 以来就有问题已经是一个有效的类型。这篇论文的这一部分在 Oulu 中被删除了,尽管 future 的一些提案可能会表明一些类模板参数应该被推导,但其他应该被指定:

X<string, ???> x3{"a", 1, "b"}; // X<string, int, const char*>.

哪里???是一系列使意图清晰的标记。

关于c++ - 类模板和多参数包的模板参数推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40053280/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com