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

Posted

技术标签:

【中文标题】Visual Studio 和使用 C++ 中的类工厂自动创建对象【英文标题】:Visual Studio and automatic object creation using class factory in C++ 【发布时间】:2016-01-13 19:05:37 【问题描述】:

我正在尝试使用 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 中的代码永远无法到达。我不知道为什么?

【问题讨论】:

【参考方案1】:
TestcaseFactory<derived> testcase_##derived(); 

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

【讨论】:

以上是关于Visual Studio 和使用 C++ 中的类工厂自动创建对象的主要内容,如果未能解决你的问题,请参考以下文章

C++ Visual Studio 2008 中未声明的标识符

在 Visual Studio 中,表达式必须具有带有 Windows 窗体的类类型 C++

Visual Studio 2010 像 Visual Studio 6 一样在 C++ 中编译内联程序集?

C++ 方法的 Visual Studio 2010 工具提示注释

在 Visual Studio 中通过 C# 类编译 C++ 代码

为啥 C++ 中的 Visual Studio 不如 C# 中的智能? [关闭]