【发布时间】:2015-04-10 10:53:44
【问题描述】:
我正在尝试使用非类型模板参数,其类型是这样的模板实例:
template<size_t num> class BitValue { ... };
class Foo {
// works
template<template<size_t> class BitValue, size_t num>
bool get(BitValue<num> && t) { ... }
// fails
template<typename T> bool
template<Bitvalue<num> bit> bool get() { ... };
template<template <size_t> Bitvalue bit> bool get() { ... };
template<template <size_t> class Bitvalue bit> bool get() { ... };
template<template <size_t> BitValue, size_t num, Bitvalue<num> bit> bool get() { ... };
};
您可能会说:为什么不使用foo.get(value)? Foo 表示一种具有多位值和单个大值的位域。我希望 foo.get<...>() 用于位域的所有成员以保持一致性。
为什么不使用`foo.get
如果可以有一个模板非类型模板参数,有什么想法吗?如果是的话怎么办?
【问题讨论】:
-
不清楚你在说什么——你需要重载
get(),其中get<X>()返回X位,而get()只返回一位? -
您既不能推断非类型模板参数的类型,也不能使用自定义类的实例作为非类型模板参数。你是说this 吗?
-
@myaut 我想重载 get() 所以 get
() 是有效的,而不仅仅是 get () ,其中 value 的类型是模板类。 -
@PiotrS。不,您正在使用一种类型。不仅仅是位位置
num很重要,get() 也需要BitValue<num> value的值。 -
@GoswinvonBrederlow 这就是为什么我解释说这不可能是你想要的