首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建只接受引用或指针的变量

创建只接受引用或指针的变量
EN

Stack Overflow用户
提问于 2015-08-28 09:17:16
回答 1查看 318关注 0票数 5

我可以创建一个只接受指针的可变模板:

代码语言:javascript
复制
template<typename ... Types>
void F(Types *... args);

或只接受引用的可变模板:

代码语言:javascript
复制
template<typename ... Types>
void F(Types &... args);

如何创建接受非const引用或指针的模板?

例如。

代码语言:javascript
复制
int a, b, c;
F(a, &b); // => F<int &, int *>
F(a, 3); // Error, 3 not pointer and cannot bind to non const-reference

注意:参考版本可能看起来不错,因为它可以绑定到指针引用,但它不会绑定到int * const

EN

回答 1

Stack Overflow用户

发布于 2015-08-28 09:35:27

您可以简单地检查Args中每种类型的需求--例如:

代码语言:javascript
复制
// Helper templates
template <bool...> struct bool_pack {};
template <bool b, bool... rest>
struct all_of : std::is_same<bool_pack<b, rest...>, bool_pack<rest..., b>> {};

template <typename... Args>
auto F(Args&&... args)
  -> std::enable_if_t<all_of<std::is_lvalue_reference<Args>{}
                          or std::is_pointer<std::decay_t<Args>>{}...>{}>
{}

假设F仅与演绎一起使用,则只允许使用lvalue和指针。Demo与您的示例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32267516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档