c++ - 当类名存储在另一个变量中时如何创建类的实例

标签 c++ templates

<分区>

Possible Duplicate:
minimal reflection in C++

基本上我将类名存储在 char * 中,我如何创建该类的实例。 以下是我的想法。当我通过 Test 时它起作用了作为模板参数很好,但如果我尝试这样的事情 Test *t = CreateType<ptr>它不会起作用。

有什么办法可以做到这一点。

class Test{
public:
    Test() {
    }
    ~Test() {
    }
};

template <typename T> 
T* CreateType() {
    return new T;
}

int main ( int argc, char **argv) {
    char *ptr = "Test";
    Test *T = CreateType<Test>();
    return 0;
}

最佳答案

在 C++ 中直接是不可能的,因为该语言不是自省(introspection)的。

您可以尝试做类似的事情。例如,您可以有一个 map< string, baseClassPointer >其中键是类的名称,值是指向该类对象的指针。然后你可以通过从映射中复制一个对象来创建其他对象(你可以通过类型名称获得)。我不建议这样做。

不过,工厂模式可能适合您的需要。

关于c++ - 当类名存储在另一个变量中时如何创建类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12157303/

相关文章:

c++ - 使用 OpenSSL 将现有 TCP 套接字转换为 TLS

c++ - 在模板派生类中复制构造函数

c++ - llvm JIT addGlobalMapping,不能添加类成员函数,这是一个模板函数

c++ - 为C++中的所有枚举类添加方法专门化

c++ - 为什么我转发到单独命名空间中的 std::make_pair 不明确?

c++ - 如何在C++中正确导航目录路径

C++ `using {var}` 不是 {child class} 的成员 - 在 MSVC 或 Clang 中使用 `std::deque` 时

html - 将图像从 XML 插入到 XSL 文档

c++ - Eclipse,C/C++,链接同一工作区中的两个项目

c++ - Monotouch : Adding . 资源,gcc 错误