gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:53:09 24 4
gpt4 key购买 nike

我正在尝试使用 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(); 

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com