【发布时间】:2016-10-26 07:10:00
【问题描述】:
我根本不知道这是否可能,但我想从给定的类中“隐藏”一些模板参数。这就是我的意思,假设我有以下代码:
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;
};
现在假设 Bar 不需要知道 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> 这样的东西才能成为可能。我能想到的最接近的事情是在 haskell 中进行柯里化。
【问题讨论】:
-
为什么不简单地
Bar<Foo, 5, float>,其中template<template <class...>Foo, int ARG, class... FOO_ARGS> struct Bar { Foo<FOO_ARGS..., ARG> obj;}; -
听起来您正在寻找模板级 lambda(或至少是模板级部分应用程序)。
-
@melpomene 是的,我想这是一个非常接近的想法。我不相信它在 C++ 中可用,是吗?
-
@lightxbulb,MPL 有它们。你也可以自己做。但这会很复杂。