私はC++で次のC#の機能を書き換えしようとしているが、多くはより多くの私が考える必要があり、今がありますよ:テンプレートおよび/またはtypeof演算()を使用して抽象基本クラス型のオブジェクトをインスタンス化
public abstract class Component
{
}
public class Entity
{
private List<Component> m_components = new List<Component>();
public T AddComponent<T>() where T : Component
{
if (typeof(T).IsSubclassOf(typeof(Component)))
{
T newComponent = Activator.CreateInstance<T>();
m_components.Add(newComponent);
return newComponent;
}
else
{
return null;
}
}
public Component AddComponent(Type t)
{
if (t.IsSubclassOf(typeof(Component)))
{
Component newComponent = (Component)Activator.CreateInstance(t);
m_components.Add(newComponent);
return newComponent;
}
else
{
return null;
}
}
}
これは限り私が得たようである:
class Component
{
Component() { }
~Component() { }
void OnCreate() = 0;
}
class Entity
{
public:
template<class N> void Entity::AddComponent()
{
N *newComponent = new N();
m_components->push_back(newComponent);
newComponent->OnCreate();
}
private:
std::vector<Component*> *m_components;
}
は、グーグルやテンプレート上に読んでいくつかの良いをしましたが、この時点で私は経験豊富なプログラマはこの上で見る必要があると思います。正しい軌道にいるのですか?私は '未解決の外部シンボル'エラーが発生しているし、C + +コードは、それが正しいタイプのサブクラスを作成していることを検証していません。私はこれが2つのトピックを包含するかもしれないことを認めますが、誰かが私に手を差し伸べることができれば素晴らしいでしょう!
は「typeof演算は、」C#はハック固有です。 C++には同様の構文がいくつかありますが、それらは悪いプログラミング方法とみなされます。ここでの正しい解決策は、仮想メソッドを適切に使用することです。 –
@SamVarshavchikコメントをいただきありがとうございます。私は "typeof"がC#固有であり、使用するのが望ましくないことを知っています。おそらくそれを言及すべきではありません。あなたが答えを提供する瞬間があるなら、私はあなたの提案を聞くことに興味があるでしょう! –