c++ - iso c++ 禁止声明没有类型的泛型

标签 c++ generics

我的母语是 C#,所以当我开始使用 C++ 时,我想为 C# 中可用的库使用者创建 get/set 糖语法。

所以我写...

template<typename T>
class GetProperty
{
    private:
        T (*get)();
    public:
        GetProperty(T (*get)())
        {
            this->get = get;
        }
        operator T()
        {
            return get();
        }
        template<typename S, typename T>
        GetProperty<S> operator=(GetProperty<T> fool)
        {
            throw 0;
        }
 };

然后,为了使用它,我编写了代码:

template<typename T>
class Vector
{
    private:
        struct LinkItem
        {
            public:
                T* Item;
                LinkItem* Next;
                                GetProperty<int> Length (&getLength);
                LinkItem(T* Item = NULL, int length = 1, LinkItem* Next = NULL)
                {
                    this->Item = Item;
                    this->length = length;
                    this->Next = Next;
                }
                LinkItem& operator =(LinkItem rhs)
                {
                    this->Item = rhs.Item;
                    this->length = rhs.length;
                    this->Next = rhs.Next;
                    return *this;
                }
            private:
                 int length;
                 int getLength()
                 {
                     return length;
                 }
        };
        LinkItem* current;
    .
    .
    .
};

但是,Netbeans 上的 C/C++ 添加项(我相信这是 g++ 编译器)声称我正在实例化没有类型的 GetProperty。
根据 Google 搜索,如果有人忘记了 using 语句或包含 header 等,就会发生这种情况。
但是 int 是原始类型,所以这不可能。
这是怎么回事?

最佳答案

您正在构造 GetProperty 对象,同时在结构中声明它。这在 C++ 中是不允许的。您必须将构造移至构造函数。

关于c++ - iso c++ 禁止声明没有类型的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10757623/

相关文章:

c++ - OpenGL 在 Qt 4.8 的单独线程中离屏

c++ - 以编程方式确定给定 processid 的应用程序状态

c++ - 这种反转字符串的方式安全吗?

c++ - 重载构造函数的 Unresolved external symbol 错误

java - 创建选项的通用函数

node.js - Nodejs : merging functions using callbacks

c# - 是否有任何令人信服的理由不能在 C# 中对默认值 (T) 使用等于运算符 (==)

c++ - Microsoft C++ 预定义宏

Java 泛型 - 使用元素列表实现接口(interface)

java - Set 中的 GenericsAdd (capture <? extends ConstraintViolation>) 无法应用于 (ConstraintViolation)