簡體   English   中英

C ++模板錯誤

[英]C++ template errors

我正在嘗試在這里找到的C ++簡單屬性系統的實現。

但是代碼不會編譯。

template <class T, class Object, typename T (Object::*real_getter)()>
class ReadOnlyProperty
{
    Object * my_object;
public:
    void operator () ( Object * obj )
    {
        my_object = obj;
    }

    T operator()() const
    {
        return (my_object->real_getter)();
    }


    T get() const
    {
        return (my_object->real_getter)();
    }


    void set( T const & value );


    operator T() const {
        return (my_object->*real_getter)();
    }

    typedef T value_type;

};

我在第一行遇到多個錯誤。 我使用的是Xcode 4,LLVM 2.1或GCC 4.2都不能編譯它。 有什么問題?

成員函數指針可以是模板參數,但是在這種情況下,您不應在前面輸入typename

template <class T, class Object, T (Object::*real_getter)()>

另一個錯誤是調用:

(my_object->real_getter)()

應該是:

(my_object->*real_getter)()

模板參數列表不能那樣工作。 模板參數必須是以下之一:類型名稱,類型(有限制)或模板。

也許您是說要具有默認類型?

template <class T,
          class Object,
          typename U = T (Object::*real_getter)()>
class ...

這里的U默認為成員函數指針,但是您必須提供完整的簽名,包括返回類型。

還是說real_getter成為成員typedef?

template <class T, class Object>
class ReadOnlyProperty
{
  typedef typename  T (Object::*real_getter)();
  //...
};

還是正如@jmihalicza所建議的,您想要一個類型為T (Object::*)()的value參數?

template <class T, class Object, T (Object::*real_getter)()>
class ReadOnlyProperty
{ //...
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM