【问题标题】:C++ template static pointer-to-member initializationC++模板静态成员指针初始化
【发布时间】:2010-10-16 02:32:47
【问题描述】:

我有一个模板类,它有一个指向成员的静态指针,如下所示:

template<class T, T* T::*nextptr>
class Queue
{
    T* head;
    T* tail;
    static T* T::*pnext;
};

我的问题是如何编写静态成员指针的初始化程序。我尝试了明显的案例:

template<class T, T* T::*nextptr> T* Queue<T, nextptr>::*pnext(nextptr);

但这没有用。有什么想法吗?

【问题讨论】:

    标签: c++ templates static initialization


    【解决方案1】:

    你真的需要一个与模板参数具有相同值的模板的静态成员变量吗?

    唯一的用途是如果它的值在程序的生命周期内发生变化,但我真的想不出任何情况下这会产生比引起混乱更多的好处。

    【讨论】:

    • 感谢洞察,我真的不需要静态成员变量,只需要模板参数。
    • 如果他只知道类型,他就可以使用它。然后他可以做 Type::pnext; (很像那些类型定义),但我会建议他将指针设为 const。但即便如此,我更喜欢静态内联函数。
    【解决方案2】:

    Queue&lt;T, nextptr&gt;::pnext 被声明为T* T::* 类型,所以它应该是这样的:

    template<class T, T* T::*nextptr>
    T* T::* Queue<T, nextptr>::pnext(nextptr);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-02
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      相关资源
      最近更新 更多