因此,我正在尝试使用一种策略,该策略又具有非类型模板化功能。编译器在弄清楚我要做什么时遇到了一些问题。
例如,一项策略如下所示:
template <int unsigned NBits> struct Foo {
/* Internal data type that provides NBits of storage */
typedef int unsigned DataType; // for example
/* Accessor */
template <int unsigned QueryBit>
bool const IsBitSet(DataType const &) const { /* ... */ }
};
另一个策略使用此策略对设置的位执行一系列操作:
template <typename FooPolicy> struct DoBar_WithFoo {
FooPolicy FooPolicy_;
bool const XOR_SpecificBits(FooPolicy::DataType const &Data) const {
// Error listed below points to this line
return FooPolicy_.IsBitSet<10>(Data) ^ FooPolicy_.IsBitSet<8>(Data) /* ... */ ;
}
};
用户类需要 Foo 策略和 Bar 策略:
template<typename FooPolicy, typename DoBar_Policy> struct UserClass {
// Use FooPolicy for data
void MyFunction() {
// Use DoBar_Policy to manipulate data
}
};
用户将以上两者结合如下:
typedef Foo<12> Foo_12Bits_type;
typedef DoBar_WithFoo<Foo_12Bits_Type> Bar_type;
typedef UserCLass<Foo_12Bits_type, Bar_type> MyUserClass;
MyUserClass.MyFunction();
我收到如下错误:
error: invalid operands of types '<unresolved overloaded function type>' and 'int' to binary 'operator<'
此错误指向以下代码(如上所述):
/* ... */ FooPolicy_.IsBitSet<10>(Data) /* ... */
我可以从中推断出 <10> 看起来像一个比较操作。但是,我真的要求编译器专门化策略中包含的模板函数。
我可以这样做吗?我该怎么做呢?
如果有人想知道,我正在尝试编写 LFSR。我想在未来转向不同的基础数据类型,并将用于生成 LFSR 的特定多项式与用于存储和操作 LFSR 位的数据类型和操作分开。
提前致谢!