草庐IT

c++ - 带 get 的数据结构,返回一个 constexpr (C++)

我目前正在寻找一种封装数据以供编译时访问的数据结构。因此,访问的值应该作为constexpr返回。虽然元组确实具有constexpr构造函数,但元组的get函数不返回constexpr。是否存在这样的数据结构,或者是否可以手动定义这样的数据结构?最终目标是将编译时已知值打包到某种对象中,将其(通过模板)传递给函数,访问那里的元素并将编译时已知值作为常量直接粘贴到二进制文件中。就我的目的而言,封装部分至关重要。 最佳答案 从C++14开始,std::tuple确实接受constexprstd::get#includeintmain()

c++ - 如何使用没有复制构造函数的给定类初始化元组

我有一个要求,需要按如下方式初始化元组。如何创建包含A类对象的元组?#include#includeusingnamespacestd;classA{inta;public:A(constA&)=delete;A(inta):a(a){}};std::tuple&createTuple(A&&a){returnstd::make_tuple(std::forward(a));}intmain(){std::cout(createTuple(std::forward(A(1))));}我不能以任何方式修改A类。 最佳答案 像这样:st

c++ - 一个 std::shared_ptr<> 的 std::tuple<> 不起作用?

我最近发现使用std::tuple有问题只有一个元素。我创建了一个用于类型删除并保留N个引用计数对象的类。但是,如果引用计数对象是std::tuple中唯一的一个,则不会保留它。.我做错了什么吗?classtoken{public:templatetoken(Types...types):_self(std::make_shared>(std::make_tuple(std::move(types)...))){}//WhydoIneedthisspecialversionoftheconstructor?//Uncommentandthecodewillwork!//template

c++ - GCC 中的元组模板

我首先在VS2010中使用MicrosoftVC++开始使用C++。我最近找到了一些工作,但我一直在使用RHEL5和GCC。我的代码主要是原生C++,但我注意到一件事......GCC似乎无法识别头文件或元组模板。起初我以为这可能只是一个拼写错误,直到我查看cplusplus.com发现该header确实不是标准库的一部分。问题是我喜欢在VisualStudio中编写代码,因为它的环境比eclipse或netbeans更优越、更美观,而且调试也很容易。问题是,我已经编写了大量代码来使用元组,而且我真的很喜欢我的代码。我该如何处理这个问题?这是我的代码:usingstd::cout;us

c++ - 是否可以从大括号类型的初始化中推断出元组的模板参数?

在这个例子中,是否可以允许推导元组的模板参数类型?#include#includetemplatevoidfun(std::tuplet,std::stringother){}intmain(){fun(std::tuple(2.,3),std::string("other"));//okfun(std::make_tuple(2.,3),std::string("other"));//ok,buttryingtoavoid`make_tuple`fun({2.,3},std::string("other"));//desiredsyntaxbut//givingcompilation

c++ - 冲突的不匹配标签与标准库一起编译,但不以其他方式编译

我在看如何std::tuple_size在我系统的标准库中定义。我有一个MacOS,编译器版本是AppleLLVMversion8.1.0(clang-802.0.42).标准库位于InstalledDir中g++--version输出的位置鉴于以下代码无法编译(因为clang不喜欢将之前定义为struct的东西特化/重新声明为class,反之亦然)#include#include#include#include#includeusingstd::cout;usingstd::endl;templateclassSomething;templatestructSomething>;te

c++ - 具有 const 不可复制元素的元组

我需要创建一个std::tuple其中XYZ不可复制。这样的事情甚至可能吗?我当前的代码autotest()->std::tuple{returnstd::make_tuple(XYZ());}在VisualStudio2010中导致C2248...我发现这很可疑,因为我正在构建具有R值的元组,所以我假设移动构造会启动... 最佳答案 您的问题是该元素既不可复制又const.constXYZ元素表现为constXYZ成员;通过5.2.5p4访问constXYZxvalue上的元素将产生具有unioncv资格的xvalue,即具有有效

c++ - 通过 std::tuple<...> 实现 map() 和 each() - 将索引作为模板参数传递给仿函数

经过几年的Web开发,我再次使用C++(14)工作,并决定通过模板元编程获得一些“动态类型函数的乐趣”。我已经实现了map和each在元组上:templatevoidtuple_each_internal(Tupleconst&tuple,Funcfunc,index_sequence){autores={(func(get(tuple)),nullptr)...};}template::value>>voidtuple_each(Tupleconst&tuple,Funcfunc){tuple_each_internal(tuple,func,Indices());}structde

c++ - 从元组函数一次存储 2 个变量

我有一个元组函数,它返回一个形式为的元组有没有一种方法可以在不创建另一个元组的情况下一次存储2个值。我知道我们可以做到n,score=tuplefunct(abc);在python中。但是如果我想在C++中存储两个返回值而不创建另一个元组,我需要调用两次n=get(tuplefunct(abc);score=get(tuplefunct(abc));在C++中是否有任何替代方法来一次存储值。 最佳答案 您不需要调用该函数两次(请注意,不涉及“另一个元组”,该函数返回一个,这就是您使用的):autox=tuplefunct(abc);

c++ - 使用数组作为元组成员 : Valid C++11 tuple declaration?

下面的代码可以在G++4.7.2中正常编译:#includestd::tuplex;但是,使用clang++3.2会产生以下错误:错误:数组初始化器必须是一个初始化器列表。如果我从元组声明中删除float类型,错误就会消失。上面的元组声明是否有效?($CXX-std=c++11-c文件.cpp) 最佳答案 我认为标准中没有任何内容禁止您的声明。但是,一旦尝试初始化、复制、移动或分配元组,就会遇到问题,因为对于这些操作,元组的所有成员类型都必须能够用作初始化器、可复制构造、可复制分配和移动分配,分别(§20.4.2.1)。这些都不是数