我想定义一个宏来完成以下任务:
class Program
{
static void Main(string[] args)
{
Board d=new Board();
Square s=new Square();
s.m1(d);
}
}
class Board
{
int x=10;
}
class Square
{
public void m1(Board a)
{
Console.WriteLine(a.x);
}
Console.ReadLine();
}
我无法做到这一点因为" #define std::vector Vector
"似乎不允许在宏名称中。我想这样做的原因是我试图使用Stroustrup的范围检查向量(来自std_lib_facilities.h在他的书“编程原则与实践”中)。他使用:
:
(评论是Stoustrup')
问题在于我宁愿没有" // disgusting macro hack to get a range checked vector:
#define vector Vector
"在声明using namespace std;
的头文件中。这意味着我需要在其他头文件中使用Vector
,然后使用Stroustrup"宏hack"不起作用。我收到与" std::vector
"相关的错误,这些错误不存在。
所以我的问题是:是否可以使用完全限定的类型名称作为宏名称,以便将其替换为" std::Vector
"?
答案 0 :(得分:4)
请勿使用预处理器。这就是别名模板的用途:
template<typename T>
using vector_in_use = std::vector<T>;
您在整个代码库中使用vector_in_use
,它将使用std::vector
编译您的代码。然后,要切换你只需要替换一行:
using vector_in_use = Vector<T>;
答案 1 :(得分:0)
好吧,你可以将你的Vector包含到std命名空间中,然后在每个使用它的文件中,你输入define和undef:
namespace std
{
#include "Vector.h"
}
#define vector Vector
//...
#undef vector
这真的很恶心,哈哈......但那就是做你想做的事。