【问题标题】:Is There a way to use the Parameter Names from a typedef有没有办法使用 typedef 中的参数名称
【发布时间】:2018-12-26 14:30:00
【问题描述】:

所以给定一个typedef,它定义了一个函数指针,其参数名称如下:

typedef void(*FOO)(const int arg);

有没有一种方法可以让我使用这个函数指针来定义我的函数的签名?显然这行不通,但我想以某种方式使用typedef 来指定具有相应类型的函数签名:

FOO foo {
    cout << arg << endl;
}

再一次,我知道这行不通,而且语法不好。它只会给出错误:

错误:arg 未在此范围内声明

【问题讨论】:

  • 你不能声明这样的函数。带有函数的 Typedef 用于函数指针/引用。
  • 您希望cout &lt;&lt; arg &lt;&lt; endl; 打印什么?
  • FOO 是一个函数指针。 FOO foo { /* statements */ } 应该是什么意思?
  • 这个问题没有任何意义。 FOO 是函数指针的类型定义。写void FOO(const int arg)的方法不短
  • @Tyker 我试图用它来定义一个函数。所以我希望它打印任何传递给定义函数的东西。例如:我希望这可以被称为foo(13)

标签: c++ parameters arguments function-pointers typedef


【解决方案1】:

函数指针的定义与声明无关,也与函数的定义无关,因此答案是否定的。

【讨论】:

  • 嗯,它可能与它有一些东西 - 例如,这个FOO f(); 是完全有效的函数声明。
  • @NeilButterworth 多么令人烦恼:)
  • 相反,显然一个函数指针只能寻址一个签名匹配的函数,所以有直接的关联。我正在尝试根据相应的函数签名找到一种方法来定义函数。
【解决方案2】:

你试图做的事情不会奏效。 FOOvoid(*)(const int) 的别名。所以

FOO foo {
    cout << arg << endl;
}

变成

void(*)(const int) foo {
    cout << arg << endl;
}   

那是行不通的。但是,您可以做的是定义一个带有名称的宏,并使用该名称来标记函数签名。看起来像

#define MAKE_FUNCTION(NAME) void NAME(const int arg)

MAKE_FUNCTION(foo){ std::cout << arg * 5 << "\n"; }

MAKE_FUNCTION(bar){ std::cout << arg * 10 << "\n"; }

int main()
{
    foo(1);
    bar(2);
}

【讨论】:

  • 嗯...不是我所希望的,但至少它试图回答 +1 的问题。
  • @JonathanMee 谢谢。对于您实际要完成的工作,这是我现在能想到的最好的。如果我想到别的东西,我会把它添加到答案中并 ping 你。
  • 我试图清理问题以更清楚地表明这是最好的答案......但谁知道呢?我似乎真的在这个问题上失败了。
猜你喜欢
  • 2023-01-17
  • 2016-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多