c++ - 如何在不复制此代码的情况下将一些代码放入多个命名空间?

标签 c++ namespaces code-duplication

假设我在两个不同的命名空间中定义了方法:

namespace foo
{
    void print()
    {
        //do work...
    }
}

namespace bar
{
    void print()
    {
        //do work...
    }
}

foo::print()bar::print() 函数绝对 相等。我的项目使用了这些函数的大量调用。

有没有办法删除 print() 定义之一而不更改这些函数的调用?我的意思是这样的(当然,C++ 语言不允许这种构造,这只是一个例子):

namespace foo, bar  //wrong code!
{
    void print()
    {
        //do work...
    }
}

如果无法按照我的意愿重构代码,请告诉我,你喜欢下面的决定吗?如果你的项目包含这样的代码,你会高兴吗? :)

namespace foo
{
    void print()
    {
        //do work...
    }
}

namespace bar
{
    void print()
    {
        foo::print();
    }
}

添加:

谢谢你们,我对你们的回答非常满意。我希望您澄清一下:using::foo::printusing foo::print 之间有区别吗?

最佳答案

您可以通过 using 声明来实现这一点。

namespace foo
{
    void print()
    {
        //do work...
    }
}

namespace bar
{
    using foo::print;
}

编辑

关于 ::foo::printfoo::print 之间的区别:在限定名称前加上::意味着您明确引用全局命名空间。这可以用来选择全局的,即使在范围内有另一个同名的项目。

关于c++ - 如何在不复制此代码的情况下将一些代码放入多个命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20836622/

相关文章:

c# - 如何在页面和母版页之间共享代码而无需多重继承/代码重复?

ruby-on-rails - STI + 命名空间

C++ 跨文件共享变量的良好做法?

c# - mvc 替代对多个 View 和 Controller 使用 if-else

ruby-on-rails - Rails - 相同表单的不同 form_for 语句

namespaces - Python 库基础知识

c# - 使用 P/Invoke 跨 C++/C# 边界管理非托管字符串

c++ - 如何延长表达式范围内临时变量的生命周期?

javascript - 读/写文件导致错误。 (JavaScript 和 C++)

c++ - Qt并发映射错误c2440