首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以在编译时判断方法是否是可公开访问的?

是否可以在编译时判断方法是否是可公开访问的?
EN

Stack Overflow用户
提问于 2014-03-03 18:04:51
回答 1查看 195关注 0票数 3

在C++中,如果一个类有一个命名的字段、ty以至方法,那么可以在编译时获得SFINAE技巧。

我的问题是:我们能否以某种方式询问一个方法是否是可访问的?比如区分私人方法和公共方法。

例如,如果有一个类私有地从std::vector继承,比如class T : private std::vector<int> { ... };,我不想检测它的begin方法,因为它是不可公开访问的。

当我在说教时,我只得到检测方法的代码,没有关于可见性的任何信息.最近我得到的was this解决了继承的方法,但不清楚它是如何与可见性交互的。显然,我可以进行测试,但是我关心编译器的特定行为,因为我正在处理一个关于旧微软编译器的项目:\

编辑/:它认为C++标准改变了它对这个问题的看法:对于C++03,任何可见的或不可见的成员都是可替换的,但是因为C++11只有可见的成员。这是对的吗?

我对下面的代码进行了一些测试,该代码检测了value_type类型胡枝子。我不知道标准是怎么说的,但是我用不同的编译器编译,结果如下:

  • gcc : 4.4 truetrue,4.5,true,4.6,true,4.7,true,4.8,false,4.9,前
  • Clang : 3.3 fail
  • 国际商会: 13 true
  • msvc :2005年true _

下面是代码:

代码语言:javascript
运行
复制
#include <vector>

typedef char yes;
typedef int no;

template<class T> struct has_value_type {
   template<class U> static yes test(typename U::value_type*);
    template<class U> static no  test(...);
    static const bool value = sizeof(test<T>(0)) == sizeof(yes);
};

class C : private std::vector<int> {  };

int main() {
   return has_value_type<C>::value;
}
EN

回答 1

Stack Overflow用户

发布于 2014-03-05 10:26:11

正如您在对example的评论中所指出的:

“建议的SFINAE只有在方法公开的情况下才能工作”

因此,它只会发现应该解决你问题的公共方法。

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

https://stackoverflow.com/questions/22154011

复制
相关文章

相似问题

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