相关疑难解决方法(0)

如何在C++中实现"虚拟模板功能"

首先:我已阅读并且我现在知道在C++中虚拟模板成员函数(但是?)是不可能的.解决方法是将类作为模板,然后在member-function中使用template-argument.

但是在OOP的上下文中,我发现如果该类实际上是一个模板,下面的例子将不会非常"自然".请注意,代码实际上不起作用,但gcc-4.3.4报告:error: templates may not be ‘virtual’

#include <iostream>
#include <vector>

class Animal {
    public:
        template< class AMOUNT >
        virtual void eat( AMOUNT amount ) const { 
            std::cout << "I eat like a generic Animal." << std::endl; 
        }
        virtual ~Animal() { 
        }
};

class Wolf : public Animal {
    public:
        template< class AMOUNT >
        void eat( AMOUNT amount) const { 
            std::cout << "I eat like a wolf!" << std::endl; 
        }
        virtual ~Wolf() { 
        }
};

class Fish : public …
Run Code Online (Sandbox Code Playgroud)

c++ virtual templates

41
推荐指数
5
解决办法
5万
查看次数

生成没有虚函数的接口?

我正在编写一个游戏引擎,我为对象设置了这个类:

class SceneManager //controls everything in the "world" game
{
    public:
        void Add(SceneObject* object); //adds to the vector
    private:
        vector<SceneObject*> _worldObjects; //the vector that contains all of them
}
Run Code Online (Sandbox Code Playgroud)

我在游戏上工作的所有类都继承自SceneObject:

class SceneObject
{
    public: 
        virtual void Draw() = 0;
}

class Image : public SceneObject
{ }
class Sprite : public SceneObject
{ }
class Model3D : public SceneObject
{ }
Run Code Online (Sandbox Code Playgroud)

所以我知道我可以为我的向量中的所有对象调用Draw().但我一直致力于优化,我正在尝试摆脱所有继承和虚函数,而是使用组合,因为它们无法内联,并且在每个对象上执行时似乎是一个主要的性能问题基础.

我正在寻找一些C++技术,我可以使用它来在我的向量中存储一堆SceneObjects,然后在它上面调用Draw()并正确绘制与之相关的对象.这也适用于我用作虚拟的Update()函数.

所以这段代码:

void SceneManager::Add(SceneObject* object)
{
    _worldObjects.push_back(object);
}
void SceneManager::DrawTheWorld()
{
    for(unsigned int i = 0; i < …
Run Code Online (Sandbox Code Playgroud)

c++ design-patterns

3
推荐指数
1
解决办法
1910
查看次数

标签 统计

c++ ×2

design-patterns ×1

templates ×1

virtual ×1