C++ -类型绑定绑定解析的正确方法?
我有以下代码片段:C++ -类型绑定绑定解析的正确方法?,c++,C++,我有以下代码片段: namespace X86X64 { struct IMM8 {}; } namespace X86 { using namespace X86X64; struct RM8 {}; template <class _Traits> struct MOV_Instruction { typedef typename _Traits::RM8 RM8; void mov(const
namespace X86X64
{
struct IMM8 {};
}
namespace X86
{
using namespace X86X64;
struct RM8 {};
template <class _Traits>
struct MOV_Instruction
{
typedef typename _Traits::RM8 RM8;
void mov(const RM8& rm, const IMM8& imm)
{}
};
}
namespace X64
{
using namespace X86X64;
struct RM8 {};
struct RM64 {};
struct Traits
{
typedef RM8 RM8;
};
struct MOV_Instruction : public X86::MOV_Instruction<Traits>
{
using X86::MOV_Instruction<Traits>::mov;
void mov(const RM64& rm, const IMM8& imm)
{}
};
}
并希望编译器根据使用的名称空间和Koenig查找选择正确的RM8类型。
在没有重新绑定或解决正确类型的特征的情况下,他们是更好的方法吗
我可以使X86::RM8和X64::RM8具有相同的类型,但我不想为此而奋斗
谢谢
马丁
请注意,不能同时使用两个using指令,因为这会使MOV_指令不明确
此外,我将_Traits更改为Traits,因为以下划线开头,后跟大写字母的标识符保留给实现。您可能会从某个头吸引一个宏来践踏您的代码,并导致非常奇怪的编译器错误 还有一条路
});
}
int main{
使用名称空间X86
MOV_指令i;
i、 movRM8,IMM8;
返回0;
}
using namespace X86 | X64
MOV_Instruction i;
i.mov(RM8(), IMM8());
This compiles fine using VC9:
namespace X86X64 {
struct IMM8 {};
}
namespace X86 {
using namespace X86X64;
struct RM8 {};
template <class Traits>
struct MOV_Instruction {
typedef typename Traits::RM8 RM8;
void mov(const RM8& rm, const IMM8& imm) {}
};
}
namespace X64 {
using namespace X86X64;
struct RM8 {};
struct RM64 {};
struct Traits {
typedef RM8 RM8;
};
struct MOV_Instruction : public X86::MOV_Instruction<Traits> {
using X86::MOV_Instruction<Traits>::mov;
void mov(const RM64& rm, const IMM8& imm) {}
};
}
int main()
{
//using namespace X86;
using namespace X64;
MOV_Instruction i;
i.mov(RM8(), IMM8());
return 0;
}
namespace X86X64
{
struct IMM8 {};
}
namespace X86
{
using namespace X86X64;
typedef struct RM8 {} RM8;
template < class T = RM8 > struct MOV_Instruction { typedef T RM8; void mov(const RM8& rm, const IMM8& imm) {} };
void mov(const RM64& rm, const IMM8& imm) {}