【发布时间】:2017-03-29 08:57:31
【问题描述】:
假设我有这样的事情:
Header.h:
namespace detail {
template <typename T>
class HiddenClass {
/* Bunch of things... */
template <typename ...ArgList>
static HiddenClass<T> & function (const ArgList & ... argTail) {
// Do something...
}
}
}
我想打电话给detail::HiddenClass<T>::function(***);,但正如你所见,这很荒谬。更不用说这个功能应该是用户干扰的一部分。我不能指望我的代码的“用户”在他\她想打电话给function(***);时写detail::HiddenClass<T>::function(***);
我试过了:
template <typename T>
using detail::HiddenClass<T>::function;
还有其他类似的方法,但我失败得很惨......
有人可以帮忙吗?给点建议
【问题讨论】:
-
可能是别名 - 创建一个全局包装函数并从中进行复杂调用?
-
听起来像医生医生的情况。如果您不喜欢自己的名字,请更改它们。例如。为什么要将用户界面放入命名空间
detail?为什么要调用公开的Hidden? -
性能损失?
-
@KerrekSB 因为在疯狂的疯狂中,我决定将
HiddenClass中的所有内容都设为私有(甚至是构造函数......)。最后幸存下来的是静态function(***)和friend函数不能调用私有构造函数。 -
假设您考虑@PiotrTrochim 提到的包装函数,现在的编译器非常擅长优化和内联。调用实际函数的小内联函数将增加很少的(如果有的话!)开销。
标签: c++ class namespaces