将函子传递给构造函数
Pass functor to constructor
本文关键字:构造函数 更新时间:2023-10-16
我有一个类,它基本上需要存储构造函数中给定的函子,类似于以下内容:
template <class T>
class Foo {
private:
T func;
public:
Foo(T f) : func(f) { }
}
然而,要创建Foo类的新实例,我似乎不能这样做:
Foo foo(std::less<int>());
因为T是类模板参数。我不得不使用这种笨拙的语法:
Foo<std::less<int>> foo(std::less<int>());
有没有更好的方法可以做到这一点,而不需要写两次函子的类型?
Foo
不是一个类,它是一个类模板。为了创建类型,您必须使用模板参数实例化它。
关于您的示例,您可以为默认可构造的函子添加一个默认构造函数,如std::less
等人的
template <class T>
class Foo {
private:
T func;
public:
Foo() = default; // C++03 would require Foo() {}
Foo(T f) : func(f) { }
};
然后
Foo<std::less<int>> foo;
或者,您可以提供一个函数模板,该模板接受一个函子并返回一个Foo<F>
对象。
您可以使用函数来推导函子类型并返回正确的Foo
风格:
template <typename T>
Foo<T> make_foo(T t) { return Foo<T>(t); }
但这个解决方案基本上需要C++11中的CCD_ 5来存储返回值:
auto f = make_foo(std::less<int>());
相关文章:
- "error: no matching function for call to"构造函数错误
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 选择要调用的构造函数
- 如何委托派生类使用其父构造函数?
- 构造函数正在调用一个使用当前类类型的函数
- 没有用于初始化C++中的变量模板的匹配构造函数
- 初始化具有非默认构造函数的std::数组项的更好方法
- 当从函数参数中的临时值调用复制构造函数时
- 在c++构造函数中使用随机字符串生成器
- 一对向量构造函数:初始值设定项列表与显式构造
- 从构造函数抛出异常时如何克服内存泄漏
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 具有默认模板类型的默认构造函数的类型推导
- 使用dynamic_cast和构造函数时出错
- 在c++中使用向量时,如何调用构造函数和析构函数
- 奇怪的构造函数行为