gpt4 book ai didi

C++11 - std::declval() 方法名称

转载 作者:行者123 更新时间:2023-11-30 03:36:55 27 4
gpt4 key购买 nike

有没有办法,如何在 std::declval<T>() 之后将方法名称作为模板参数传递? ?

到目前为止,我有这个:

template<typename T, typename ... Args>
struct MethodInfo
{
using type = decltype(std::declval<T>().foo(std::declval<Args>() ...)) (T::*)(Args ...);
};

但我希望“foo”成为模板参数。

最佳答案

这不完全是你问的,但我认为这可能有点符合你的需要:

#include <type_traits>
#include <tuple>
#include <iostream>

template<typename T, typename... Args>
struct MethodInfo {
template<typename Ret>
static auto get(Ret(T::*)(Args...)) -> Ret(T::*)(Args...);
};

struct Foo {
int foo(int);
int foo(int, int);
};

int main() {
static_assert(std::is_same<
int(Foo::*)(int),
decltype(MethodInfo<Foo, int>::get(&Foo::foo))
>::value, "");
}

Demo

因为,函数名是一个非类型模板参数,我认为这是迄今为止唯一的解决方案。

关于C++11 - std::declval<T>() 方法名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40418367/

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