からC++:私はきたなど、「INT」、「フロート」とは、例えば、私は、文字列の形でインスタンスに私のタイプを与えるレガシーインタフェースを持つ文字列
をパラメータ化指針を作成します問題を解決するために、これらの2つの機能を思い付いた:
template <typename T>
T type_factory(const std::string& type_id)
{
if (!type_id.compare("long"))
{
long res;
return res;
}
if (!type_id.compare("double"))
{
double res;
return res;
}
if (!type_id.compare("char"))
{
char res;
return res;
}
}
と
template <class PointerClass, typename T>
PointerClass<T>* pointer_factory(void* ptr, T dummy_type)
{
return static_cast<PointerClass<T>*>(ptr);
}
//Desidered usage:
//void* raw_ptr;
//Calculator<int>* p = pointer_factory<Calculator>(raw_ptr, type_factory("int"));
第二の機能がエラーをコンパイルできないPointerClassの近くに「修飾されていないIDを期待」されます。
誰かが2番目の関数がコンパイルされず、それを修正する理由を教えてください。
ありがとうございます。 PointerClass
は、テンプレートそのものであるため、代わりに
template <class PointerClass, typename T>
PointerClass<T>* pointer_factory(void* ptr, T dummy_type)
の
template < template<typename T> class PointerClass, typename T>
PointerClass<T>* pointer_factory(void* ptr, T dummy_type)
:テンプレートテンプレートを必要とするよう
最初の機能が正しくありません。 'long'、' double'、 'char'のスーパータイプである' T'型はありません。 –
まず、 'compare'は使わないでください。代わりに '=='を使用してください! –
@ルーカマーティニ:そうです。それは素早くハックされ、その件名を突き止めることができましたが、タイプを指定しなければならないとかなり役に立たなくなります。 –