带有名称空间的模板结构的Typedef

Typedef for templated struct with namespaces

本文关键字:结构 Typedef 空间 有名称      更新时间:2023-10-16

我有三个文件:

位置。H:

namespace X {
namespace Y {
namespace Z {
template<typename T1 = long, typename T2 = long>
struct Position {
};
}}}

class_from_api.h

#include "position.h"
typedef X::Y::Z::Position<> Position;
namespace X {
namespace Y {
namespace Z {
class ClassFromAPI {
    Position<> p;  // why not Position?
};
}}}
typedef X::Y::Z::ClassFromAPI ClassFromAPI;

user_class.h:

#include "class_from_api.h"
Class UserClass : public ClassFromAPI {
    Position p;
};

我的问题是:为什么我必须在classFromapi" position&lt;>"中写入,而在UserClass中,有必要写入"位置",尽管这两个都有相同的Typedef。 <</strong>

classfromapi的更改导致:

error C2955: 'X::Y::Z::Position' : use of class template requires template argument list

更改Userclass的结果:

error C2059: syntax error : '<'
error C2238: unexpected token(s) preceding ';'

X::Y::Z::Position模板的定义 shadows ::Position typedef。它在X::Y::Z中是看不见的。

您不能使用相同的名称来参考模板和类型在同一范围中。您需要更改其中的一个。