Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
元组中的转发声明和交叉引用 >别名,作为元组< /代码>,这不是合法的C++代码。我知道这是非法的(在我的帖子中这样说……)但是请注意,这两个例子几乎是等价的,所以我希望第一个是可行的,第二个也是可行的。如果std::tuple比没有交叉引用的结构更可取,那么交叉引用仍然是正确的,我想使用它。@Borbei no,class Record1;forward declares是一个类型。使用Record1=…定义了一个类型别名,而不是一个类型。是的,我知道。我希望我在问题中说清楚(显然,我没有).我的问题很简单:如何使第一个示例使用元组而不是结构?您知道structs只是classes,其所有成员都是公共的?struct Record1是类类型的名称标识符。如果您声明与别名相同的标识符,则如何破解compiler将区分类型和别名?谢谢!但我认为如果没有一些额外的包装,这些Record1和Record2类实际上不能用作元组,这会给解决方案带来不便。例如,“Record1 r1=std::make_tuple(0,nullptr);”不起作用。@Borbei只需添加一个typedef来声明基类,然后使用继承构造函数,就可以了。请参阅更新的答案。我使用的编译器不支持构造函数继承,但您的解决方案似乎已经完成。谢谢!_C++_Templates_Typedef_Forward Declaration_Cross Reference - Fatal编程技术网

元组中的转发声明和交叉引用 >别名,作为元组< /代码>,这不是合法的C++代码。我知道这是非法的(在我的帖子中这样说……)但是请注意,这两个例子几乎是等价的,所以我希望第一个是可行的,第二个也是可行的。如果std::tuple比没有交叉引用的结构更可取,那么交叉引用仍然是正确的,我想使用它。@Borbei no,class Record1;forward declares是一个类型。使用Record1=…定义了一个类型别名,而不是一个类型。是的,我知道。我希望我在问题中说清楚(显然,我没有).我的问题很简单:如何使第一个示例使用元组而不是结构?您知道structs只是classes,其所有成员都是公共的?struct Record1是类类型的名称标识符。如果您声明与别名相同的标识符,则如何破解compiler将区分类型和别名?谢谢!但我认为如果没有一些额外的包装,这些Record1和Record2类实际上不能用作元组,这会给解决方案带来不便。例如,“Record1 r1=std::make_tuple(0,nullptr);”不起作用。@Borbei只需添加一个typedef来声明基类,然后使用继承构造函数,就可以了。请参阅更新的答案。我使用的编译器不支持构造函数继承,但您的解决方案似乎已经完成。谢谢!

元组中的转发声明和交叉引用 >别名,作为元组< /代码>,这不是合法的C++代码。我知道这是非法的(在我的帖子中这样说……)但是请注意,这两个例子几乎是等价的,所以我希望第一个是可行的,第二个也是可行的。如果std::tuple比没有交叉引用的结构更可取,那么交叉引用仍然是正确的,我想使用它。@Borbei no,class Record1;forward declares是一个类型。使用Record1=…定义了一个类型别名,而不是一个类型。是的,我知道。我希望我在问题中说清楚(显然,我没有).我的问题很简单:如何使第一个示例使用元组而不是结构?您知道structs只是classes,其所有成员都是公共的?struct Record1是类类型的名称标识符。如果您声明与别名相同的标识符,则如何破解compiler将区分类型和别名?谢谢!但我认为如果没有一些额外的包装,这些Record1和Record2类实际上不能用作元组,这会给解决方案带来不便。例如,“Record1 r1=std::make_tuple(0,nullptr);”不起作用。@Borbei只需添加一个typedef来声明基类,然后使用继承构造函数,就可以了。请参阅更新的答案。我使用的编译器不支持构造函数继承,但您的解决方案似乎已经完成。谢谢!,c++,templates,typedef,forward-declaration,cross-reference,C++,Templates,Typedef,Forward Declaration,Cross Reference,考虑以下代码: struct Record1; // Forward declaration. struct Record2; // Forward declaration. struct Record1 {int a; Record2 *r2;}; struct Record2 {int b; Record1 *r1;}; 它是可编译和可用的。现在,假设我想使用元组,而不是结构。可能吗?似乎我无法避免typedefs需要某种(非法的)转发声明,例如: class Record1; clas

考虑以下代码:

struct Record1; // Forward declaration.
struct Record2; // Forward declaration.

struct Record1 {int a; Record2 *r2;};
struct Record2 {int b; Record1 *r1;};
它是可编译和可用的。现在,假设我想使用元组,而不是结构。可能吗?似乎我无法避免typedefs需要某种(非法的)转发声明,例如:

class Record1;
class Record2;

using Record1 = std::tuple<int, Record2*>; // No go. Conflicting declaration.
using Record2 = std::tuple<int, Record1*>; // Same here.
类记录1;
班级记录2;
使用Record1=std::tuple;//不行。相互矛盾的声明。
使用Record2=std::tuple;//彼此彼此。
我尝试过几种方法,包括拼命滥用后期模板实例化,但没有成功。如果有任何想法,我将不胜感激


谢谢

滥用公共继承权是获得你想要的东西的一种方式:

#include <iostream>
#include <tuple>

class Record1;
class Record2;

class Record1: public std::tuple<int, Record2*> { using base = std::tuple<int, Record2*>; using base::base; };
class Record2: public std::tuple<int, Record1*> { using base = std::tuple<int, Record1*>; using base::base; };

int main() 
{
    Record1 r1 = std::make_tuple(0, nullptr);        
    std::cout << (std::get<0>(r1) == 0) << (std::get<1>(r1) == nullptr);
}
#包括
#包括
班级记录1;
班级记录2;
类记录1:public std::tuple{using base=std::tuple;using base::base;};
类记录2:public std::tuple{using base=std::tuple;using base::base;};
int main()
{
Record1 r1=std::make_tuple(0,nullptr);

STD::你试图把<代码>类< /C> >别名,作为<代码>元组< /代码>,这不是合法的C++代码。我知道这是非法的(在我的帖子中这样说……)但是请注意,这两个例子几乎是等价的,所以我希望第一个是可行的,第二个也是可行的。如果std::tuple比没有交叉引用的结构更可取,那么交叉引用仍然是正确的,我想使用它。@Borbei no,
class Record1;
forward declares是一个类型。
使用Record1=…
定义了一个类型别名,而不是一个类型。是的,我知道。我希望我在问题中说清楚(显然,我没有).我的问题很简单:如何使第一个示例使用元组而不是结构?您知道
struct
s只是
class
es,其所有成员都是公共的?
struct Record1
类型的名称标识符。如果您声明与别名相同的标识符,则如何破解compiler将区分类型和别名?谢谢!但我认为如果没有一些额外的包装,这些Record1和Record2类实际上不能用作元组,这会给解决方案带来不便。例如,“Record1 r1=std::make_tuple(0,nullptr);”不起作用。@Borbei只需添加一个typedef来声明基类,然后使用继承构造函数,就可以了。请参阅更新的答案。我使用的编译器不支持构造函数继承,但您的解决方案似乎已经完成。谢谢!