C ++模板专业化/重载

乔伦·海特

首先,很抱歉这个问题的标题含糊。我不确定如何对其进行总结。

我想要实现的是以下内容,我希望能够将不同类型的模板非类型参数传递给相同的类模板,从而导致不同的实例化。像这样的东西:

Foo<1>();
Foo<'1'>(); // different types of object

我认为这是不可能的,因此我被迫做这样的事情

template <typename T, T Val>
struct Foo;

template <int Val>
struct Foo<int, Val> 
{};

template <char Val>
struct Foo<char, Val>
{};

//...

Foo<int, 1>();
Foo<char, '1'>();

这样Foo可以根据第一个模板参数进行专门设置​​。但是,这使我要在元编程框架中实现的迷你语言的语法复杂化。有没有可以使我与众不同Foo<1>的技术Foo<'1'>基本上,我想做的是设置一个编译时标记(在枚举中),以指示是否传递intchar,而没有明确指定它们。

编辑答案使我意识到我的问题暗示我实际上需要这些对象的实例(编译时)。我不...

假设标准以某种方式允许我重载类模板,使得Foo<1>Foo<'1'>是不同的类型,并且为其flag字段包含不同的值然后可以将这些类型本身传递给另一个类模板,该类模板可以检查它们并对其进行有趣的处理,例如:

template <typename FooType>
struct Bar
{
    typedef typename If < FooType::flag, int, char >::Type Type;
};

当您不反对显式传递类型时,这一切都是非常容易的,但这似乎是多余的...

建设者

您可以使用宏:

#define MAKE_FOO(value) \
    Foo<decltype(value), value>()

实际上,我认为您make_something在编译时需要诸如广泛的函数模板之类的东西不幸的是,我不知道如何实现它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++中的模板专业化和函数重载

来自分类Dev

C ++模板专业化

来自分类Dev

C ++部分模板模板专业化

来自分类Dev

指针的C ++模板专业化?

来自分类Dev

C ++部分模板专业化问题

来自分类Dev

如何防止C ++模板的专业化?

来自分类Dev

C ++模板部分专业化

来自分类Dev

C ++部分模板专业化混淆

来自分类Dev

C ++模板专业化冗余减少

来自分类Dev

C ++类模板专业化

来自分类Dev

多条件模板专业化C ++

来自分类Dev

C ++指针模板专业化

来自分类Dev

具有SFINAE的C ++ 11模板函数专业化允许进一步的专业化(错误:重载函数的调用不明确)

来自分类Dev

子模板中的C ++模板专业化

来自分类Dev

签名模板类的C ++模板专业化

来自分类Dev

C ++中多个模板之一的模板专业化

来自分类Dev

使用 CMake 的 C++ 模板专业化

来自分类Dev

函数模板C ++的显式专业化

来自分类Dev

C ++可变参数模板方法专业化

来自分类Dev

C ++模板专业化/部分和全部

来自分类Dev

局部类模板专业化C ++ 11

来自分类Dev

C ++-可变参数模板部分专业化

来自分类Dev

C++ 98 中的部分模板专业化?

来自分类Dev

带有派生类的c ++模板专业化

来自分类Dev

C ++构造函数模板专业化

来自分类Dev

防止在C ++中编译未使用的模板专业化

来自分类Dev

C ++模板专业化,但未找到匹配项

来自分类Dev

C ++部分模板专业化和Natvis

来自分类Dev

C ++模板专业化和函数返回值