C++,指向函数的指针作为新类型

标签 c++ parameter-passing function-pointers generic-programming

在 C++ 2003 中,typedef 只能用于完整类型。因此,不允许创建指向函数的指针和通用 T 作为类型:

template <typename T>
typedef T(*f_function)(T, T, T);

有没有办法使用语法在 C++ 2003 或 C++0x 中避免此问题

using (*f_function)(T, T, T); // something like that

我想使用指向函数 fff 的指针作为类成员

template <typename T>
class A
{
public:
    f_function fff;

    A() {fff = NULL;}
    A( f_function pf){fff = &pf;}
};

template <typename T>
T f1(T x, T y, T z) {   return x + y + z;}

template <typename T>
T f2(T x, T y, T z) {   return x - y - z;}

并在构造函数中初始化其值。随后:

int main()
{
A <double> a(f1);
double res = a.getX(1.1, 2.2, 3.3);
}

这个建筑安全吗?还有其他方法可以解决这个问题吗?感谢您的帮助。

最佳答案

您可以使用别名模板(C++11)声明:

template <typename T>
using f_function = T(*)(T, T, T);

示例:

http://coliru.stacked-crooked.com/a/5c7d77c2c58aa187

#include <iostream>
#include <string>
#include <array>

template <typename T>
using f_function = T(*)(T, T, T);

template <typename T>
class A
{
public:
    f_function<T> fff;

    A() {fff = NULL;}
    A( f_function<T> pf){fff = pf;}
};

template <typename T>
T f1(T x, T y, T z) {   return x + y + z;}

template <typename T>
T f2(T x, T y, T z) {   return x - y - z;}

int main()
{
A <double> a(f1);
double res = a.fff(1.1, 2.2, 3.3);
std::cout << res;
}

关于C++,指向函数的指针作为新类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37736267/

相关文章:

c++ - 同时处理非成员函数指针和成员函数指针

javascript - 传递 self (函数)

c++用新类初始化二维 vector ;默认值更改

c++ - 如何检查boost消息队列是否存在

function - 将函数作为参数传递 - lambda 表达式错误?

class - Puppet:通过类传递参数

c++ - 从 sockaddr * 转换为 sockaddr_in * 增加了所需的对齐方式

c++ - 在通过 native 字符串创建 BSTR(使用 _bstr_t 包装器)时,如何设置长度?

c++ - 我什么时候会通过 const& std::string 而不是 std::string_view?

c++ - 在 C++ 中创建成员函数名称并在运行时调用它