0

我想在使用Visual Studio 2010的C++中创建一个框架,我可以在许多派生类的类定义的同一时间创建对象。我一直在阅读这篇文章,并了解可以使用的工厂模式。然而,我无法让它工作。Visual Studio和在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中的代码永远不会到达。我无法弄清楚为什么?

回答

1
TestcaseFactory<derived> testcase_##derived(); 

这行声明了一个函数,而不是一个变量。它是C++的(最)vexing parse的变体 - 如果它可以是一个声明,它是。