c++ - 是否可以像为另一种类型重载成员访问运算符那样解析静态成员?

标签 c++

我不确定该怎么调用它,但是像注释行反射(reflect)的那样可能吗?

template <typename T>
class Test
{
public:
    Test(T& t) : m_t(t) {}
    T* operator->() { return &m_t; }

private:
    T& m_t;
};

class A
{
public:
    static const int integer = 0;

    void function() {}
};

int main()
{
    A a;

    Test<A> test(a);
    test->function();

    // Something similar to doing Test<A>::integer?

    return 0;
}

最佳答案

那么,你为什么不这样做:

test->integer;

您始终可以像访问非静态成员一样访问静态成员(即从实例变量)。

另一种选择是在测试中定义:

template <typename T>
class Test
{
public:
  typedef T value_type;
  // ...
};

在这种情况下,您将能够:

Test<A>::value_type::integer;

这将避免创建 Test<A> 实例的需要.

最后,如果您使用的是 C++11 和 Test遵循智能指针约定,那么您将拥有:

std::pointer_traits<Test<A> >::element_type::integer;

即使替换 Test<A> 也能正常工作与 A* .

关于c++ - 是否可以像为另一种类型重载成员访问运算符那样解析静态成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22897059/

相关文章:

c++ - GCC/GCOV 为使用 throw()/noexcept 的函数生成的不同分支覆盖

C++ 类型名作为变量

c++ - 如果不为每个分配 1, "int x,y,z = 1 "在做什么?

c++ - uint32_t 作为映射键的数据类型

c++ - 迭代 boost multi_index

c++ - 整数->指针转换规则

c++ - Boost.Spirit.Qi : dynamically create "difference" parser at parse time

c++ - 使用引用比使用指针的优势是否证明偶尔出现 "null-references"是合理的?

c++ - C++中istream的eof

c++ - -Wlifetime 标志的目的是什么?