我有一些相互依赖的模板实例。通常我只是向前宣布它们,但我不知道这是怎么可能的。这是一个例子
#include <tuple>
#include <memory>
using Tuple = std::tuple<int,TupleContainer>;
using TupleContainer = std::unique_ptr<Tuple>;
int main()
{
return 0;
}
由于需要Tuple
而无法先写TupleContainer
,因为需要TupleContainer
而无法先写Tuple
。
如何转发声明其中一个使用定义?
答案 0 :(得分:2)
我设法通过在std :: tuple周围使用一个瘦的包装类并使用前向声明来实现。
#include <tuple>
#include <memory>
struct Tuple;
using TupleContainer = std::unique_ptr<Tuple>;
struct Tuple : public std::tuple<int,TupleContainer>{
using std::tuple<int,TupleContainer>::tuple;
};
int main()
{
return 0;
}
答案 1 :(得分:-3)
你需要一个真正的指针,就像你尝试使用递归结构定义一样,它失败了,因为它无法停止。
using my_tuple = std::tuple<int, std::tuple<int>*>;