c++ - 依赖于默认模板类型参数的非类型模板参数

标签 c++ templates c++17

有没有办法(在 C++17 中)在模板中实现类似于前向声明的东西? 我想要实现的是这样的:

template<typename T, SizeType D, typename SizeType = int>

显然这里 D 依赖于 SizeType,所以它必须在它之前。但在那种情况下,我无法设置默认参数,除非 D 也有默认参数(我不想要)。基本上我希望能够在 D 之前“声明”SizeType,但在它之后“定义”它。

编辑:这是我想如何使用它的示例:

template<typename T, SizeType D, typename SizeType = int>
class StaticArray{};
//...
StaticArray<float, 5> s; // = StaticArray<float, 5, int>
StaticArray<float, (1<<40), size_t>; // 1<<40 doesn't fit in int

最佳答案

可以做这样的事情

template<typename T, auto DArg, typename SizeType = int, SizeType D = DArg>

现在首先提供D 的参数,然后是D 的类型,最后将参数转换为 D 类型正确。

关于c++ - 依赖于默认模板类型参数的非类型模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56884092/

相关文章:

c++ - 使用正确的重载集调用多个函数的对象

c++ - is_container 特性在 std::set SFINAE 问题上失败

c++ - 如何构造一个类型特征来判断一个类型的私有(private)方法是否可以在另一种类型的构造函数中调用?

c++ - 使用带有 std::optional 参数的 std::function 重载歧义

c++ - 使用 wmemset 初始化导致 coredump

c++ - 静态链接 C++ OpenCV

c++ - 为什么编译器不能优化这两条语句?

c++ - 更改对象的类:可能使用 std::move?

C++ 模板 - 没有可行的转换错误

c++ - 在模板化函数中将 std::vector 设置为本地会导致编译失败