- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
为什么 std::initializer_list
不支持std::get<>
, std::tuple_size
和 std::tuple_element
?在constexpr
中用得很多现在的表达式,例如,
std::max({1, 2, 3, 4, 5});
如果它确实很酷,那么下面的事情将成为可能
auto [x, y] = {1, 2};
那么为什么 std::initializer_list
不支持这些?据我所知,没有办法构建 std::initializer_list
在运行时,因此大小始终由用户固定。
下面是一个如何获取 std::intializer_list<>
大小的示例在编译时
#include <iostream>
#include <initializer_list>
using std::cout;
using std::endl;
template <typename...> struct WhichType;
template <typename Type>
constexpr int size_init_list(std::initializer_list<Type> il) {
return il.end() - il.begin();
}
int main() {
constexpr auto size = size_init_list({1, 2, 3});
cout << static_cast<int>(std::integral_constant<int, size>{}) << endl;
return 0;
}
最佳答案
尽管 std::initializer_list
的大小是编译时常量,大小不是类型的一部分。 int
的每个初始化列表s 具有相同的类型,即 std::initializer_list<int>
.和 std::tuple_size<std::initializer_list<int>>::value
只能有一个可能的值。所以很明显它不能用于获取初始化列表的实际大小。定义它根本没有意义。
关于c++ - 为什么 std::initializer_list 不支持 std::get<>、std::tuple_size 和 std::tuple_element,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44667517/
当为某个模板显式特化 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中用得很多现在的表达式,
我是一名优秀的程序员,十分优秀!