【问题标题】:How to call class static function directly如何直接调用类静态函数
【发布时间】: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&lt;T&gt;::function(***);,但正如你所见,这很荒谬。更不用说这个功能应该是用户干扰的一部分。我不能指望我的代码的“用户”在他\她想打电话给function(***);时写detail::HiddenClass&lt;T&gt;::function(***);

我试过了:

template <typename T>
using detail::HiddenClass<T>::function;

还有其他类似的方法,但我失败得很惨......

有人可以帮忙吗?给点建议

【问题讨论】:

  • 可能是别名 - 创建一个全局包装函数并从中进行复杂调用?
  • 听起来像医生医生的情况。如果您不喜欢自己的名字,请更改它们。例如。为什么要将用户界面放入命名空间detail?为什么要调用公开的Hidden
  • 性能损失?
  • @KerrekSB 因为在疯狂的疯狂中,我决定将HiddenClass 中的所有内容都设为私有(甚至是构造函数......)。最后幸存下来的是静态function(***)friend函数不能调用私有构造函数。
  • 假设您考虑@PiotrTrochim 提到的包装函数,现在的编译器非常擅长优化和内联。调用实际函数的小内联函数将增加很少的(如果有的话!)开销。

标签: c++ class namespaces


【解决方案1】:

您可以提供一个可以缩短调用语法的宏:

#define MY_FUNCTION(Type, Arg) detail::HiddenClass<Type>::function(Arg)

那么,它在全局命名空间中的使用会更短,并且不需要using

HiddenClass<SomeType>& rc = MY_FUNCTION(SomeType, argTail);

【讨论】:

    猜你喜欢
    • 2022-07-01
    • 2011-10-04
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多