18

次の動作を持つコードを持つことが可能かどうかを知りたい:

int main()
{
    func<vector>(/*some arguments*/);
}

つまり、操作対象の型を指定せずに、ユーザーがコンテナーを指定できるようにしたいのです。

たとえば、定義funcする可能性のある (メタ) コード (上記では機能しない) は次のようになります。

template<typename ContainerType>
int func(/*some parameters*/)
{
    ContainerType<int> some_container;
    /*
        operate on some_container here
    */
    return find_value(some_container);
}
4

2 に答える 2

22

構文は次のとおりです。

template <template <typename...> class ContainerType>
int func(/*some parameters*/)
{
    // Your code with ContainerType<int>
}

注: (c++17 まで)classで置き換えることはできません。typename

型とアロケータを取るため (デフォルト)typenameの代わりに単純に使用することはできません。typename...std::vectorstd::vector<T, Allocator>

于 2016-07-05T10:25:20.850 に答える
9

これを試して:

template<template<typename,typename> class ContainerType>
int func (/*some parameters*/)
{

}

std::vectorは次のように定義されているため、2 つの内部テンプレート パラメータが必要です。

template < class T, class Alloc = allocator<T> > class vector;

于 2016-07-05T10:28:04.230 に答える