首先,很抱歉这个问题的标题含糊。我不确定如何对其进行总结。
我想要实现的是以下内容,我希望能够将不同类型的模板非类型参数传递给相同的类模板,从而导致不同的实例化。像这样的东西:
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'>
?基本上,我想做的是设置一个编译时标记(在枚举中),以指示是否传递了int
或char
,而没有明确指定它们。
编辑答案使我意识到我的问题暗示我实际上需要这些对象的实例(编译时)。我不...
假设标准以某种方式允许我重载类模板,使得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] 删除。
我来说两句