2016-06-23 1 views
2

これはまったく可能かどうかわかりませんが、テンプレートのパラメータを特定のクラスから「隠す」ことができます。ここで私は、次のコードを持っていると言う、私の意味は次のとおりです。C++テンプレートのパラメータを隠す

template<class A, int b> 
class Foo 
{ 
}; 
template<template<class,int> class Foo_specialized, class A, int b> 
class Bar 
{ 
    Foo_specialized<A,b> obj; 
}; 

今すぐはずバーは、Aについて知っておく必要がありますが、Bについて知る必要がありません。 当然のことながら、このようなものは、(以下は単にアイデアを説明するために擬似コードで)完璧になる:

template<template<int> class Foo_specialized_by_first_parameter, int b> 
class Bar 
{ 
    Foo_specialized_by_first_parameter<b> obj; 
}; 

私はそれがすべてで可能だと、アイデアはこのような何かを持っているだろう、本当にわからないんだけどインスタンス化するときBar:

Bar<Foo<float>, 5> bar_instance; 

もちろん、Fooは1つのパラメータを受け入れないため、これは機能しません。 基本的には(Foo<float>)<5>のようなものが必要です。私が考えることができる最も近いことは、ハズケルのカリングです。

template <template<int> class Foo_specialized_by_first_parameter, int b> 
class Bar 
{ 
    Foo_specialized_by_first_parameter<b> obj; 
}; 

であなたが行うことができ、

template <int N> 
using Foo_float = Foo<float, N>; 

そして:

+1

単純に 'Bar 'ではないのですが、 'template