我正在创建一个类,它接收未知数量的对象,然后在屏幕上绘制它们。
我尝试使用模板,但不知道它们是如何工作的,而且到目前为止,我所阅读的每个来源都显示了不同的编写方式。
的.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;,但我很确定我已经为该类创建了一个构造函数。
我做错了什么?
答案 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 ©1, drawable ©2, drawable ©3){}
HPP
composite::composite(drawable ©1 = nullptr, drawable ©2 = nullptr, drawable ©3 = nullptr)
这样我可以使用0..3参数调用构造函数(在实际赋值中它是0..10,但我在这里做得更小,因为它只是一个例子)。