- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的问题很奇怪而且很短:为什么没有对 std::tuple_size 进行特化以供引用有充分的理由吗?
(现在是动机)
我有很多代码看起来像:
template<typename Tuple, typename Indices =
std::make_index_sequence<
std::tuple_size<
typename std::remove_reference<Tuple>::type>::value
>
>
auto func(Tuple&& t, ...) -> decltype(...) {
return ...;
}
我希望使用 remove_reference 不是错误的做法,但由于它只适用于类型级别,所以我认为这里没有问题。另一种可能性是使用 std::move 传递元组,因为那时元组不是引用,但由于我只想转发元组,所以我也想传递左值引用,所以我使用了 std::remove_reference。
没那么糟糕,我只是好奇为什么 tuple_size 不适用于引用类型。有什么想法吗?
最佳答案
一般来说,类型特征作用于实际传递的类型,而不是任何潜在相关的类型。为 std::tuple_size>
提供基本操作似乎是一致的,可用于创建更方便的版本。换一种方式,即拥有方便的版本并从中构建限制性更强的版本,似乎更有问题。
只需使用一个助手:
template <typename T>
struct my_tuple_size
: std_integral_constant<std::size_t,
std::tuple_size<
typename std::remove_reference<T>::type>
::value> {
};
(我希望我在手机上输入正确)
关于c++ - std::tuple_size 和引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20827806/
当为某个模板显式特化 tuple_size 和 tuple_element 时,我意识到 §14.5.1/4,它是这样写的 In a redeclaration, partial specializa
我有以下代码: class TR_AgentInfo : public tuple { public: TR_AgentInfo() {} TR_AgentInfo( const long lon
这个小程序 https://ideone.com/dqVJbN #include #include #include using namespace std; class MetaData {
我的问题很奇怪而且很短:为什么没有对 std::tuple_size 进行特化以供引用有充分的理由吗? (现在是动机) 我有很多代码看起来像: template::type>::value
为什么 tuple_size 是一个自由特征而不是类中的成员变量/typedef?后者导致 ODR 违规的风险要小得多。 是否有一个具体的用例,其中具有特征 tuple_size 比在类中定义此内联更
是 std::tuple_size 的特化和 std::tuple_element允许自定义类型?我想是的,但我想绝对确定,我找不到任何具体信息。 示例(省略了命名空间、成员函数和 get 重载):
我有两个关于辅助类的问题 std::tuple_size的 std::array . 首先,有一个constexpr size()类中的成员函数 std::array ,为什么需要 std::tupl
我的代码看起来像下面这样: #include class DoubleArray: std::array { public: void clear() { fill(0.0)
我在实现递归模板(模板结构中的函数)时遇到问题,它将被 std::tuple_size 终止。 这是代码片段(我简化了代码,以强调问题): template struct Helper
编辑附加:问题标题是“Visual Studio 编译器或 Clang 是否有不正确的行为”- 但已更改。 所以我在这里补充一下,clang 和 gcc 按照我的预期编译它,但 VS 没有。 我有以下
我在命名空间中有一个类模板 我在该 namespace 内有一个非成员函数,它返回一个 std::tuple的 std::shared_ptr(s)> 我调用了函数 F()并将其结果( std::tu
我有一个自定义类,它有一个类似元组的接口(interface)。因为我希望我的代码尽可能通用,所以我认为将我的算法基于函数 std::get、std::tuple_size 是个好主意>, std::
Clang 的行为“未定义模板 smthg”是否有(干净的)解决方法? 代码示例: https://godbolt.org/z/GGs7ndKE4 (复制/粘贴见下文) 额外的见解: 这个问题是不是
在下面的代码中,为什么第二个和第三个概念会产生编译错误? #include template concept IsPair1 = std::tuple_size::value == 2; temp
在下面的代码中,为什么第二个和第三个概念会产生编译错误? #include template concept IsPair1 = std::tuple_size::value == 2; temp
为什么 std::initializer_list不支持std::get<> , std::tuple_size和 std::tuple_element ?在constexpr中用得很多现在的表达式,
我是一名优秀的程序员,十分优秀!