将未知数量的参数传递给构造函数

时间:2015-09-14 16:39:47

标签: c++ templates sfml

我正在创建一个类,它接收未知数量的对象,然后在屏幕上绘制它们。

我尝试使用模板,但不知道它们是如何工作的,而且到目前为止,我所阅读的每个来源都显示了不同的编写方式。

的.cpp

// file composite.cpp

#include <SFML/Graphics.hpp>
#include "composite.h"
#include "copy.h"

template<typename arguments> class drawable
composite<arguments>::composite() {
    drawable<arguments> shape;
}

void draw(sf::RenderWindow & window, sf::Vector2f position) {
    for (int i = 0; i < 10; ++i) {
        //if (parts[i] != NULL) {
            // Draw part
            //parts[i].draw();
        //}
    }
}

.HPP

// file composite.hpp

#ifndef _COMPOSITE_HPP
#define _COMPOSITE_HPP

#include <SFML/Graphics.hpp>
#include "drawable.h"
#include "copy.h"

template<typename arguments>
class composite : public drawable {
public:
    composite<arguments>::composite();
    void draw(sf::RenderWindow & window, sf::Vector2f position) {};
private:
    copy *shape1, *shape2, *shape3;
    copy *parts[10];
};

#endif

现在我收到错误&#34;错误C2514:&#39;复合&#39; :class没有构造函数&#34;,但我很确定我已经为该类创建了一个构造函数。

我做错了什么?

3 个答案:

答案 0 :(得分:0)

  

我做错了什么?

我认为你已经尝试过度简化代码,而不是微不足道的事情,你应该重新设置你的研究。

很容易使用其他人的模板来设计它们的确切内容(例如std :: vector)。设计自己的模板更加困难。如果你以前做过简单的模板,我不确定这个问题的代码。您的代码并未表明对使用模板实现参数化类的概念的理解,这比将多个参数传递给构造函数的概念更为重要。

答案 1 :(得分:0)

如果你想要一个接受多个参数的函数,也许这可以帮助你:

template <typename... Args>
void function(Args&&... args) {
//Do something with args or forward it.. 
//(std::forward<Args>(args)...);
}

Pd积。也许你应该更好地解释你的问题以获得更好的答案。

答案 2 :(得分:0)

我找到了解决问题的方法。 如果我想要一个带有变量参数集的构造函数,我应该执行以下操作:

CPP

composite::composite(drawable &copy1, drawable &copy2, drawable &copy3){}

HPP

composite::composite(drawable &copy1 = nullptr, drawable &copy2 = nullptr, drawable &copy3 = nullptr)

这样我可以使用0..3参数调用构造函数(在实际赋值中它是0..10,但我在这里做得更小,因为它只是一个例子)。