dam*_*gad 5 c++ variadic-templates c++11
我写了(在c ++ 11中)一个可变参数模板constexpr函数,它计算参数类型的最大大小,例如:
maxSizeof<int, char, MyType>()
Run Code Online (Sandbox Code Playgroud)
这工作正常.然后我想有一个可变参数模板类,其中一个字段是一个大小等于maxSizeof()的数组.这也应该正常工作:
template <typename... TypesT>
class Myclass {
uint8_t field[maxSizeOf<TypesT...>()]
}
Run Code Online (Sandbox Code Playgroud)
但我还需要Myclass为每个参数类型声明方法.我通过以下方式使用CRTP:
template <typename... TypesT>
class Myclass;
template <>
class Myclass {
uint8_t field[maxSizeOf<TypesT...>()] // (1) Couldn't do it here as there are no `TypesT`
}
template <typename FirstT, typename... OtherT>
class Myclass<FirstT, OtherT...> : public Myclass<OtherT...> {
public:
virtual void doSomething(FirstT object) = 0;
private:
uint8_t field[maxSizeOf<FirstT, OtherT...>()] // (2) Shouldn't do it here as it will create field for all of the "middle" classes
}
Run Code Online (Sandbox Code Playgroud)
问题是如何实现方法的声明,同时具有适当大小的数组字段.(1)和(2)因评论中说明的原因不起作用.
像大多数SW工程问题一样,这可以通过添加更多层间接来解决[1]:
template <typename... TypesT>
class MyclassFunctions;
template <>
class MyclassFunctions
{};
template <typename FirstT, typename... OtherT>
class MyclassFunctions<FirstT, OtherT> : public MyClassFunctions<OtherT...>
{
public:
virtual void doSomething(FirstT object) = 0;
};
template <typename... TypesT>
class Myclass : public MyclassFunctions<TypesT...>
{
uint8_t field[maxSizeOf<TypesT...>()]
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
159 次 |
| 最近记录: |