gpt4 book ai didi

c++ - 为什么我不能推导出类模板参数之一?

转载 作者:行者123 更新时间:2023-12-03 10:05:48 24 4
gpt4 key购买 nike

我这里有一些代码

template<typename T, std::size_t size, typename funcType>
struct foo
{
public:

foo(const funcType& func) : m_func(func) {}
~foo() {}

void m_call() { m_func(); }

private:
const funcType& m_func;

T x[size];
};

void printString() { std::cout << "some string\n"; }
我可以创建一个对象
foo<int, 3, void(*)()> someObject(printString);
或者
foo<int, 3, decltype(printString)> someObject(printString);
但是当我尝试这样做时:
foo<int, 3> someObject(printString);
我在 g++ 10.2 上收到此错误
error: wrong number of template arguments (2, should be 3)
foo<int, 3> someObject(printString);
^
note: provided for 'template<class T, long unsigned int size, class funcType> struct foo'
struct foo

为什么我不能这样做?编译器不知道什么类型 printString是?
如果我更改 foo
template<typename funcType>
struct foo
{
public:

foo(const funcType& func) : m_func(func) {}
~foo() {}

void m_call() { m_func(); }

private:
const funcType& m_func;
};
我可以正常创建
foo someObject(printString);
我错过了什么吗?

最佳答案

使用模板函数创建对象并从函数调用中扣除缺失的模板参数。像这样的东西。

template<typename T, std::size_t Size, typename FunctionT>
foo<T, Size, FunctionT> create_foo(const FunctionT &func) {
return foo<T, Size, FunctionT>(func);
}

auto foo_obj = create_foo<int, 3>(printString);

关于c++ - 为什么我不能推导出类模板参数之一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65841372/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com