Visual Studio 和 C++ 中使用类工厂自动创建对象

Visual Studio and automatic object creation using class factory in C++

本文关键字:工厂 创建对象 Studio C++ Visual      更新时间:2023-10-16

我正在尝试使用 Visual Studio 2010 在C++中创建一个框架,我可以在创建对象的同时创建许多派生类的类定义。我一直在阅读一些这方面的内容,并了解可以使用的工厂模式。但是,我无法使其正常工作。

我有以下代码:

#include <stdio.h>
#include <iostream>
#include <vector>
class TestCase;
std::vector<TestCase*> testcases;
class base
{
public:
    static void init();
};
template<class T>
class TestcaseFactory// : public base
{
public:
    TestcaseFactory()
    {
        testcases.push_back(new T());
    }
private:
};

class TestCase
{
public:
    virtual void id() = 0;
};
#define TESTCASE(derived)
class derived; 
TestcaseFactory<derived> testcase_##derived(); 
class derived : public TestCase
TESTCASE(derived1)
{
    void id() {std::cout << "derived 1" << std::endl;}
};
TESTCASE(derived2)
{
    void id() {std::cout << "derived 2" << std::endl;}
};
int main()
{
    for(unsigned int i = 0; i < testcases.size(); ++i)
    {
        std::cout << i << std::endl;
        testcases[i]->id();
    }
    getchar( );
}

并且期望 main() 中的循环调用两个创建的对象并打印

derived1
derived2

然而什么也没发生。由于某种原因,#define中的代码永远不会被访问。我不知道为什么?

TestcaseFactory<derived> testcase_##derived(); 

此行声明函数,而不是变量。它是(最)令人烦恼的C++解析的变体 - 如果它可以是一个声明,那就是。