int
に変換されているにもunsigned int
および他のタイプを受け入れて、そしてあなたは、整数引数の数に(次の例では63)の上限値を受け入れることができる場合、私はan example from W.F.に従うことを提案します。
ですから、Tensor
は、以下の
struct Tensor : public proOp<int>
{
using proOp<int>::operator();
};
なる、typer
template <typename T, std::size_t>
using typer = T;
と再帰struct proOp
proOp<int>
から継承
template <typename T, std::size_t N = 64U,
typename = std::make_index_sequence<N>>
struct proOp;
template <typename T, std::size_t N, std::size_t... Is>
struct proOp<T, N, std::index_sequence<Is...>> : public proOp<T, N-1U>
{
using proOp<T, N-1U>::operator();
void operator() (typer<T, Is>... ts)
{ }
};
template <typename T>
struct proOp<T, 0U, std::index_sequence<>>
{
void operator()()
{ }
};
を開発することができますが、完全な実施例である
#include <utility>
template <typename T, std::size_t>
using typer = T;
template <typename T, std::size_t N = 64U,
typename = std::make_index_sequence<N>>
struct proOp;
template <typename T, std::size_t N, std::size_t... Is>
struct proOp<T, N, std::index_sequence<Is...>> : public proOp<T, N-1U>
{
using proOp<T, N-1U>::operator();
void operator() (typer<T, Is>... ts)
{ }
};
template <typename T>
struct proOp<T, 0U, std::index_sequence<>>
{
void operator()()
{ }
};
struct Tensor : public proOp<int>
{
using proOp<int>::operator();
};
int main()
{
Tensor t;
t(1, 2, 3);
t(1, 2, 3, 4U); // accept also unsigned
//t(1, "two"); // error
}
何可変引数テンプレートパラメータパックについての完全な実施例でありますか? – user0042
C++バリデーションテンプレートを使用して、引数を特定の型(または特定の型に変換可能)に制限することができます。しかし、得られたパラメータパックを使用することは少し痛みです。 –
テンソルの次元は実行時プロパティか、コンパイル時のものか – StoryTeller