C++ 使用名称空间和标题

C++ 使用名称空间和标题,c++,c++98,C++,C++98,我正在从事一个项目,在这个项目中,我几乎把所有的测试代码都写在头文件中。我这么做主要是因为我在做测试驱动的开发,这导致我添加的每个类都有大量的补充类:接口、测试、模拟等等。如果我还要处理所有这些文件的cpp版本,我想我会发疯的 我没有将“using namespace std”添加到标题的开头,因为我知道这是一个否。无论如何,假设我当前在测试开始时初始化了Blob对象,如下所示: Blob v = boost::assign::list_of(std::pair<std::stri

我正在从事一个项目,在这个项目中,我几乎把所有的测试代码都写在头文件中。我这么做主要是因为我在做测试驱动的开发,这导致我添加的每个类都有大量的补充类:接口、测试、模拟等等。如果我还要处理所有这些文件的cpp版本,我想我会发疯的

我没有将“using namespace std”添加到标题的开头,因为我知道这是一个否。无论如何,假设我当前在测试开始时初始化了Blob对象,如下所示:

Blob v =
    boost::assign::list_of(std::pair<std::string, Container >("Scotland",Container(boost::assign::list_of(1)(2)(3).convert_to_container<std::vector<int> >())))
    (std::pair<std::string, Container >("Sweden",Container()));
但我不能在头球中做到这一点

我可以做些什么来解决这个问题?我正在使用C++98

更新:


只是个主意。如果我将所有测试头重命名为cpp文件会怎么样

TDD需要较短的编辑->编译->运行周期时间。因此,您应该在cpp文件中编写尽可能多的代码,以减少编译时间。 不过,您可以使用init函数解决问题:

inline Blob InitBlob()
{
    using namespace boost;
    using namespace std;
    return assign::list_of(/*...*/);
}

Blob v = InitBlob();

你能解释一下为什么TDD开发会导致头文件中的所有代码吗?@Pradheep它对我来说更方便,至少不必在Foo.h、Foo.cpp、TestFoo.h、TestFoo.cpp、MockFoo.h、MockFoo.cpp和IFoo.h之间来回切换。相反,我只有.h版本。我还必须创建所有这些文件,并将它们放在正确的文件夹中。在cpp文件中添加更多代码意味着编译时间更长,调试问题也更困难,因为所有内容都是相同的头文件。这不是用户的方便,而是更短的构建时间和更好的模块化。您已经了解到了这一点
使用名称空间std
是否定的,但将所有内容放在头文件中是肯定的?没有任何东西可以阻止您将接口、模拟和测试的定义与类放在同一个头文件中。同样,您可以将实现放入相同的
cpp
文件中。
inline Blob InitBlob()
{
    using namespace boost;
    using namespace std;
    return assign::list_of(/*...*/);
}

Blob v = InitBlob();