gpt4 book ai didi

C++17 部分推导指南

转载 作者:可可西里 更新时间:2023-11-01 17:53:05 35 4
gpt4 key购买 nike

我正在尝试编写一个推导指南,它只检测给定构造函数参数中的许多类型名之一,并要求用户手动输入 int size

template <int size, typename T>
struct Board
{
array<array<T, size>, size> values;

explicit Board(const vector<T>& raw_values){

}
};
template <int size, typename T> Board(const vector<T>&) -> Board<int size, T>;

上面的想法是仍然应该强制用户输入模板的参数“int size”,但是应该从构造函数的参数中推导出“typename T” ,这可能吗?

正确规范后,方法应该这样调用

auto b = Board<3>(initialStateVector);

目前要求我这样输入;

auto b = Board<3, int>(initialStateVector);

所以基本上,我希望从给定的 initialStateVector 中推导出上面的“int”,它具有类型

const vector<int>& raw_values

最佳答案

The idea above is that user should still be forced to enter "int size" argument of template, but "typename T" should be deduced from the argument of constructor, is this possible?

根据 this cppreference page 中的注释(和以下示例)

Class template argument deduction is only performed if no template argument list is present. If a template argument list is specified, deduction does not take place.

不,这是不可能的(在 C++17 中不行;我们希望标准的 future 版本)。

如果您想要显式大小并推断类型,我能想到的最好方法是通过一个很好的旧 make_something 函数。

我的意思如下(使用 std::size_t 作为大小,如 std::array 和几乎所有的 STL)

template <std::size_t S, typename T>
Board<S, T> make_Board (std::vector<T> const & v)
{ return {v}; }

// ...

auto b = make_Board<3>(initialStateVector);

这应该也适用于 C++11。

关于C++17 部分推导指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56351144/

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