为什么编译器无法在以下代码中推断模板参数?如何修复代码?我想添加尽可能低的运行时开销。

#include <iostream>

using namespace std;

struct Test
{
    template<int N>
    Test(const char data[N]) :
        data(data),
        size(N)
    {}

    const char *data;
    int size;
};

int main()
{
    Test test("Foobar");
    return 0;
}

我试图使代码段尽可能的小和可读。

pos-reply更新:

Tales of C++ K-ballo的以下解释可能有用:

最佳答案

您需要通过引用接受参数:

Test(const char (&data)[N] )

现在将推断出N

在您的情况下,参数被值接受,这将导致数组在传递给构造函数时衰减到指向数组第一个元素的指针。

关于c++ - 整数和const char [N]上的模板未编译(无法推断出模板参数 'N'),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15314259/

10-17 01:38