Apple.h
class Apple {
public:
Apple(int);
static int typeID;
private:
int id_;
};
Apple.cpp
#include "Apple.h"
Apple::Apple(int pID) {
id_ = pID;
}
Apple と同一の Potato.h、Potato.cpp
Storage.h
#pragma once
#include "Apple.h"
#include "Potato.h"
#include <vector>
class Storage {
public:
Storage();
template<typename foodName> void store(foodName * object){
(*getBasket<foodName>()).push_back(object);
};
template<typename foodName> int countSize(){
return (*getBasket<foodName>()).size();
};
private:
std::vector<Apple*> applebasket_;
std::vector<Potato*> potatobasket_;
template <typename foodName> std::vector<foodName*> * getBasket(){
std::vector<foodName*> * result;
switch(foodName::typeID){
case 0:
result = &applebasket_;
break;
case 1:
//result = &potatobasket_;
break;
}
return result;
}
};
ストレージ.cpp
#include "Storage.h"
int Apple::typeID;
int Potato::typeID;
Storage::Storage() {
Apple::typeID = 0;
Potato::typeID =1;
}
main.cpp
#include "Storage.h"
#include <iostream>
int main() {
Apple* apple;
Potato* potato;
Storage storage;
int i;
for(i = 0;i < 7;i++){
apple = new Apple(i);
storage.store<Apple>(apple);
}
std::cout<<storage.countSize<Apple>();
return 0;
}
このコードは機能し、正しいサイズのベクトルを出力しますが、switch ステートメント (Storage.h 内) の case 行がコメント解除されている場合、コンパイラ (g++) は「エラー: 'std::vector < Potato*>* ' を 'std に変換できません」をスローします。 ::vector< Apple*>* ' in assignment". とにかく両方のケースを試しているコンパイラのようなもので、それが可能かどうか、またこれを回避する方法がわかりません。私はこれについて助けが必要で、おそらく全体についてのアドバイスが必要です(さまざまなタイプのコンテナ用の1つのインターフェース)。最近C ++の学習を開始しましたが、おそらくここでこれを行う方法は完全に混乱しています。