C++ 如何从此标头实例化 VkSubProcess 对象
C++ How do I instantiate a VkSubProcess object from this header?
我很难理解如何实例化ViewKit VkSubProcess对象。这个东西的手册页在这里:VkSubProcess.3
我已经阅读了足够多的关于C++来理解这个标头描述了一个引用计数的抽象基类,我想我或多或少地理解了所涉及的概念。然而,我实际使用这个东西的微弱尝试都没有成功。
我的努力导致了各种编译器错误,例如:
"类"RPtr_VkSubProcessRep"没有成员"创建"
或:
"构造函数'VkSubProcessRep::VkSubProcessRep'的实例与参数列表不匹配"
有人可以好心地展示如何从这个标头实例化 VkSubProcess 对象吗?
为简洁起见,我从标题中删除了手册页中提到的函数,这些函数仅在创建实例后才会发挥作用。
非常感谢。
#ifndef _VKPROCESS_H
#define _VKPROCESS_H
#include <signal.h>
#include <Xm/Xm.h>
#include <Vk/VkCallbackObject.h>
#include <Vk/VkBase.h>
#include <Vk/VkApp.h>
class VkSPCounted : public VkCallbackObject {
friend class VkSPRPtr_base;
int nreferences;
void addRef() { nreferences++; }
void delRef() {
if (--nreferences <= 0)
delete this;
}
public:
VkSPCounted() : VkCallbackObject() { nreferences = 0; }
virtual ~VkSPCounted();
private:
VkSPCounted(const VkSPCounted&);
VkSPCounted &operator= (const VkSPCounted&);
};
class VkSPRPtr_base : public VkBase {
public:
operator void*() { return (void *)ptr; }
VkSPRPtr_base& operator=(VkSPCounted *tp) {
if (ptr) ptr->delRef();
ptr = tp;
if (ptr) ptr->addRef();
return *this;
}
VkSPRPtr_base& operator=(const VkSPRPtr_base& r){
if (ptr) ptr->delRef();
ptr = r.ptr;
if (ptr) ptr->addRef();
return *this;
}
protected:
VkSPCounted *ptr;
VkSPRPtr_base() : VkBase() { ptr = 0; }
VkSPRPtr_base(const VkSPRPtr_base& r) : VkBase() {
ptr = r.ptr;
if (ptr) ptr->addRef();
}
VkSPRPtr_base(VkSPCounted *tp) : VkBase() {
ptr = tp;
if (ptr) ptr->addRef();
}
~VkSPRPtr_base() {
if (ptr) ptr->delRef();
}
};
class VkSubProcessRep;
class RPtr_VkSubProcessRep : public VkSPRPtr_base {
public:
RPtr_VkSubProcessRep();
RPtr_VkSubProcessRep(VkSubProcessRep *tp);
RPtr_VkSubProcessRep(const RPtr_VkSubProcessRep& that) : VkSPRPtr_base(that) {}
~RPtr_VkSubProcessRep();
RPtr_VkSubProcessRep& operator=(VkSubProcessRep *tp) {
*((VkSPRPtr_base *) this) = (VkSPCounted *) tp;
return *this;
}
VkSubProcessRep& operator *();
VkSubProcessRep *operator->();
int operator !(){ return !ptr; }
};
typedef RPtr_VkSubProcessRep VkSubProcess;
class VkSubProcessRep : public VkSPCounted {
public:
static VkSubProcess create(char* cmd,
int killChildOnExit,
int redirectIn);
/* Actually create VkSubProcess */
void run();
protected:
VkSubProcessRep(const char* prog,
char **argv,
int killChildOnExit,
int redirectIn);
~VkSubProcessRep();
private:
VkSubProcessRep(const VkSubProcessRep&);
VkSubProcessRep &operator= (const VkSubProcessRep&);
};
#endif
好吧,在花了一天时间阅读C++之后,我现在知道这个标头描述了引用计数的单例模式。从我所读到的内容来看,静态的"create()"函数和受保护的构造函数似乎是这种模式的典型特征。
你可以这样使用它:
VkSubProcess process = VkSubProcessRep::create("ls -al", 1, 1);
process->run();
相关文章:
- 从C++实例化QML
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 如何创建一个空的全局类并在启动时实例化它
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 约束和显式模板实例化
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 对象实例化调用构造函数的次数太多
- 如何使用非默认构造函数实例化模板化类
- 静态数据成员模板专用化的实例化点在哪里
- 错误的cv::face FacemarkLBF实例化
- C++的解析器在可以区分比较和模板实例化之前会做什么?
- 为什么 gcc 和 clang 为函数模板的实例化生成不同的符号名称?
- 检查某些类型是否是模板类 std::optional 的实例化
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 模板化类构造函数的模板实例化
- 在 c++ 中的模板实例化中使用带有构造函数的类作为类型参数
- 受约束的成员函数和显式模板实例化
- 对显式实例化的模板函数的未定义引用
- [temp.variadic]中关于包扩展实例化的措辞