【问题标题】:How to initialize a template class with a non constant value如何用非常量值初始化模板类
【发布时间】:2020-11-05 15:20:03
【问题描述】:

我有一个模板类,我需要使用向量的大小来设置大小。实现这一目标的最佳方法是什么?下面是一个简化版,如果你需要看的话,我会链接到完整的课程。

template<int maxParams>
class ParameterChangeHandler
{
public:
    inline ParameterChangeHandler()
    {
        //Do Stuff
    };

    //More Inline Methods that use maxparams and paramBitArray

protected:
    unsigned char paramBitArray[(((maxParams)+((8) - 1)) & ~((8) - 1)) / 8]
};


int main()
{
    std::vector<int> myVectorOfParameters = { 1,2,3,4,5 };

    //This is OK
    //ParameterChangeHandler<10> paramChangeHandler;

    //This is what I want
    ParameterChangeHandler<myVectorOfParameters.size()> paramChangeHandler

}

这是针对我正在使用 Wwise SDK 构建的音频应用程序,这是一个链接,指向给我问题的实际类 AkFXParameterChangeHandler

【问题讨论】:

  • 这是不可能的,所有模板参数的值必须在编译时知道。你需要以某种方式重新设计它。
  • 谢谢,我是这么想的。我只是不确定如何去做。
  • 这取决于。看起来你想要一个模板参数,以便能够在你的类中使用一个数组。但是为什么不改为vector,然后你可以用运行时值初始化大小。
  • 把数组变成向量,然后把向量的大小传给构造函数进行初始化。

标签: c++ class templates


【解决方案1】:

你想要的都是不可能的。这是你可以做的。将 myVectorOfParameters.size() 作为参数传递给构造函数,并使用 std::vector/std::basic_string 而不是 unsigned char 数组,因此您不需要用于大小的常量表达式。

#include <vector>
#include <cstddef>

class ParameterChangeHandler
{
public:
    ParameterChangeHandler(std::size_t const max_size)
      : paramBitArray(max_size) // or reserve and push_back as needed
    {
        // Do Stuff
    };

protected:
    std::vector<unsigned char> paramBitArray;
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多