我正在尝试使用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 ++(大多数)vexing parse的变体-如果它可以是声明,则为。

关于c++ - Visual Studio和使用C++中的类工厂自动创建对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34774997/

10-11 22:58
查看更多