gpt4 book ai didi

c++ - 是否可以模拟模板

转载 作者:IT老高 更新时间:2023-10-28 22:14:00 27 4
gpt4 key购买 nike

有可能吗?我希望它能够在编译时传递参数。假设它只是为了方便用户,因为总是可以用 template<class T, T X> 输入真实类型,但对于某些类型,即指向成员函数的指针,即使使用 decltype 也是非常乏味的。作为捷径。考虑以下代码:

struct Foo{
template<class T, T X>
void bar(){
// do something with X, compile-time passed
}
};

struct Baz{
void bang(){
}
};

int main(){
Foo f;
f.bar<int,5>();
f.bar<decltype(&Baz::bang),&Baz::bang>();
}

是否有可能将其转换为以下内容?

struct Foo{
template<auto X>
void bar(){
// do something with X, compile-time passed
}
};

struct Baz{
void bang(){
}
};

int main(){
Foo f;
f.bar<5>();
f.bar<&Baz::bang>();
}

最佳答案

更新后:没有。 C++ 中没有这样的功能。最接近的是宏:

#define AUTO_ARG(x) decltype(x), x

f.bar<AUTO_ARG(5)>();
f.bar<AUTO_ARG(&Baz::bang)>();

听起来你想要一个生成器:

template <typename T>
struct foo
{
foo(const T&) {} // do whatever
};

template <typename T>
foo<T> make_foo(const T& x)
{
return foo<T>(x);
}

现在不用拼写:

foo<int>(5);

你可以这样做:

make_foo(5);

推断论证。

关于c++ - 是否可以模拟模板<auto X>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5628121/

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