gpt4 book ai didi

c++ - 使用类和模板扩展模板类

转载 作者:行者123 更新时间:2023-11-28 01:31:37 29 4
gpt4 key购买 nike

我试图为 malloc 的 unique_ptr 创建一个快捷方式类,但我未能使用默认构造函数扩展它。这就是为什么我试图对我的示例类执行相同的操作,以解决错误。这非常有效:

namespace paw {
template<class T, class F>
class Cl {
public:
Cl(T* t, F f): t(t), f(f) {}
virtual ~Cl() { if (t!= 0) { f(t); } }
private:
T* t;
F f;
};
}

class ClInt : public paw::Cl<int, std::function<void(int*)>> {
public:
ClInt() : Cl(0, free) {}
ClInt(int* t) : Cl(t, free) {}
};

int main() {
ClInt clint;
}

但是当我概括 ClInt 类时:

namespace paw {
template<class T, class F>
class Cl {
public:
Cl(T* t, F f): t(t), f(f) {}
virtual ~Cl() { if (t!= 0) { f(t); }}
private:
T* t;
F f;
};

}

template<class T>
class ClInt : public paw::Cl<T, std::function<void(T*)>> {
public:
ClInt() : Cl(0, free) {}
ClInt(T* t) : Cl(t, free) {}


};

int main() {
ClInt<int> clint;
}

我得到这个奇怪的错误:

error: class 'ClInt<T>' does not have any field named 'Cl'

但是我无法使用 paw:: 命名空间调用父类(super class)构造函数,因为我得到了

error: expected class-name before '(' token

有什么区别,为什么这不起作用?

最佳答案

像这样简单地使用模板实例的完整签名:

template<class T>
class ClInt : public paw::Cl<T, std::function<void(T*)>> {
public:
ClInt() : paw::Cl<T, std::function<void(T*)>>(0, free) {}
ClInt(T* t) : paw::Cl<T, std::function<void(T*)>>(t, free) {}


};

关于c++ - 使用类和模板扩展模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51269955/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com