gpt4 book ai didi

c++ - 多参数模板的部分默认特化

转载 作者:行者123 更新时间:2023-11-28 03:05:05 25 4
gpt4 key购买 nike

有没有办法从编译器中提取部分默认特化?

假设我有这两个参数模板:

template<typename A, typename B>
struct X {
A a;
B b;
};

我还有一些使用单个参数模板的代码,如下所示:

template<template<typename> class T, typename B>
struct make_T_of_B {
T<B> member;
};

我想说:

make_T_of_B<X<int>, double> dummy;

其中 X 被视为单个参数模板。它相当于这个模板:

template<typename B>
struct Y {
int a;
B b;
};

这看起来像是在不实际更改任何内容的情况下专门化 X 的方式。它在某种程度上类似于默认特化——除了默认特化不会生成另一个模板而是生成实际类型(换句话说,它始终是完整的)。

我意识到我可以级联模板参数

template<typename A>
struct Z1 {
// start from scratch
template<typename B>
struct Z2 {
A a;
B b;
};

// inherit from double template above
template<typename B>
struct X: ::X<A, B> {};
};


make_T_of_B<Z1<int>::Z2, double> dummy1;
make_T_of_B<Z1<int>::X, double> dummy2;

但我发现这很难读懂,而且无法清楚地传达我的意图。

谢谢。

最佳答案

我误解了你的问题。您所需要的只是一种绑定(bind)第一个模板参数的方法,您可以像这样轻松地做到这一点:

template <typename T> using Foo = X<int, T>;

现在Foo<double>X<int, double>相同.

如果没有 C++11 风格的别名,您可以使用更多的样板来实现相同的目的:

template <typename T> struct Foo
{
typedef X<int, T> type;
};

现在你使用Foo<double>::type .

关于c++ - 多参数模板的部分默认特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19918185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com