模板参数为“部分应用”
“Partial application” for template parameters
我有如下的" main "模板:
template <
template <typename> class S
> struct TT { /*...*/ };
和我想与TT
使用的模板:
template <int N, typename T> struct S1 {};
特别地,我想使用像
这样的东西TT< S1<5> > t2; // "Invalid template arguments" here
是模板的一种局部应用。我知道Boost。MPL涉及到这类东西。问题是,我已经有一些代码使用TT和模板,如
template <typename T> struct S2 {}; // S3, S4…
,它们被馈送给TT。
所以问题是:我如何使用S1
与TT
与最小的修改现有的代码。如果强制使用Boost。MPL请告诉我最合适的解决方案
定义一个从S1
派生的类模板:
template <typename T>
struct S11 : S1<5,T>
{
};
然后使用S11
代替S1
作为:
TT< S11> t2; //it is as if TT< S1<5> > t2
工作代码:http://ideone.com/y2s7n
看了你的评论,似乎你需要这个:
template<int N>
struct Magic
{
template <typename T>
struct S11 : S1<N,T>
{
};
};
//Usage
TT<Magic<5>::S11> t2;
Magic Demo: http://ideone.com/4yxvK
您还可以编写通用的部分应用程序工具:
template <template <typename ...> class TT, typename... Args>
struct Apply
{
template <typename... Rest>
struct T : TT < Args..., Rest... >
{
};
};
如果你希望应用程序的结果时间是原始模板的专门化,而不是派生类(派生类的,等等):
template <template <typename ...> class TT, typename... Args>
struct Apply
{
template <typename... Rest>
struct _T
{
typedef TT < Args..., Rest... > type;
};
template <typename... Rest>
using T = typename _T < Rest... >::type ;
};
相关文章:
- 使用 Visual C++ 创建的 WinRT DLL 不会在 Windows 应用商店应用中加载
- 语言选择:适用于Windows应用商店应用程序的C++或C#
- 在 Windows 应用商店应用中映射 Direct3D11 中的动态缓冲区
- 模板化的部分应用程序调用问题
- Windows 8 应用商店应用程序C++文件访问
- 将字符数组另存为 JPG C++用于 Windows 应用商店应用
- 应用验证程序是否可以与 Windows 应用商店应用一起使用
- 如何在MVVM Windows应用商店应用程序中为专用C++模型层编写Visual Studio单元测试
- 引用Windows应用商店应用程序项目中的C++WinRT组件
- 带有C++lambda的部分应用程序
- 是否可以使用stdio函数读取Windows应用商店应用程序中的资产
- Unicode 输入 Windows 8.1 应用商店应用程序
- 在启动时暂停 Windows 10 应用商店应用
- 编译适用于 ARM 的 Windows 应用商店C++应用
- 从C++ Windows 应用商店应用程序中使用 sqlite-winrt
- 更改非 Windows 应用商店应用的磁贴颜色
- 如何显示来自窗口应用商店应用的信息
- 编译C++源以在Windows应用商店应用程序(Windows 8)中使用它们
- 函数模板、部分应用和模板参数推导
- 模板参数为“部分应用”