[英]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.