【发布时间】:2026-01-15 04:45:02
【问题描述】:
我想知道是否有任何方法可以获取由一组特定参数生成的函数模板的实例化地址。
#include <iostream>
template <typename T>
class A {};
template <typename T, typename T2>
int hello(A<T> a, A<T2> b, int c)
{
return 69;
}
int main()
{
A<int> a;
A<float> b;
std::cout << (&hello)(a, b, 3) << "\n";
return 0;
}
此代码打印函数调用返回的值。如何打印为 a 和 b 参数实例化的“hello”版本的地址?我希望编译器能够推断出类型。
【问题讨论】:
-
&hello<A<decltype(a)>>? -
@Borgleader:这不太对,
hello的模板参数将是int,但无法使用代码原样从a获取int。 -
@Lalaland:参数可以是任何东西,不一定是类或类模板。
-
@FilipRoséen-refp:有办法获取返回类型,但是要获取地址,需要知道参数after隐式转换,在 C++ 中没有办法做到这一点。 (如果你找到一个反例,那将是开创性的,我会很高兴看到它)(相关,我正在考虑the general case。在 this 的情况下它可能 i> 可能,因为只有一个模板函数,没有重载或转换)
-
@MooingDuck 甚至没有 C++17。我们确实在库基础 TS 中获得了调用类型特征,但它们仅适用于函数对象,而不适用于泛型重载集。