c++在存储指针元组时遇到问题
c++ having trouble storing tuple of pointers
我有一个对象"S",它存储一个简单的指针元组,通过使用可变模板使其变得灵活。有两种方法,store()和store2()。第一家(商店)运转良好。第二个不会编译,因为std::make_tuple失败并返回错误:
'调用'make_tuple'没有匹配的函数
它进一步补充说,从"B*"到"B*&;'对于第一个参数(此错误在元组库标头中很深)。
代码在这里:
#include <tuple>
#include <utility>
template<typename...Rs>
struct S
{
void store(std::tuple<Rs*...> rs)
{
rs_ = rs;
}
void store2(Rs*...rs)
{
rs_ = std::make_tuple<Rs*...>(rs...); // This is the guy that breaks
}
private:
std::tuple<Rs*...> rs_;
};
struct B
{};
struct A : S<B, B>
{};
int main()
{
auto *b1 = new B;
auto *b2 = new B;
auto *a1 = new A;
a1->store(std::make_tuple(b1, b2)); // This works
a1->store2(b1, b2); // How can I get this to work?
// (It causes an error in std::make_tuple of store2 above)
}
这是一个错误,因为make_tuple
与C++11或更高版本的make_pair
一样,接受转发引用,当您显式指定非引用的模板参数时,这些转发引用将变为右值引用。
所以make_tuple<Rs*...>
就是tuple<Rs*...> make_tuple(Rs*&&...)
-参数类型都是右值引用,它们不绑定到左值(并且rs...
扩展到左值列表)。
这些make_meow
函数的全部目的是避免必须写出显式模板参数,所以……不要写它们。
我无法准确解释为什么这是一个错误(我怀疑这与强制衰减有关),但std::make_tuple
不打算用显式指定的模板参数调用(在这种情况下,您可以只使用std::tuple
,而是用于推导它们的时间)。
以下两个作品之一:
rs_ = std::tuple<Rs*...>(rs...);
rs_ = std::make_tuple(rs...);
似乎将其更改为std::make_tuple(rs...)
可以很好地工作。。。
相关文章:
- 编译包含字符串的代码时遇到问题
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 从其他类访问类时遇到问题
- 使用静态成员声明类时遇到问题
- C++ 填充数组时遇到问题
- 在将字符串放入字符串向量时遇到问题?
- 余数除法和不允许除以零 (c++) 时遇到问题
- 我在C++中使用 getline() 函数时遇到问题
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 在我的四叉树实现中遇到问题
- 在 c++ 中循环遍历数组时遇到问题
- 使用 MinGW 在 Windows 上构建 GLEW 时遇到问题
- 编译 Cilk Plus 程序时遇到问题
- 存储另一个函数返回的布尔数组时遇到问题
- 我在 OpenGL 中显示图像时遇到问题
- 我在解决此错误时遇到问题.我正在努力在主函数中传递数组
- 在 for 循环中更新两个变量时遇到问题C++
- 为什么我的程序在打开网络设备时遇到问题
- 在 Tensorflow C++ 中使用 FIFOQueue 时遇到问题
- 为什么我在虚幻引擎中的多态性和接口方面遇到问题?