- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
最近我一直在处理一个令人沮丧的问题。我有很多想隐藏在宏中的反射代码。这些 COMPONENT_x()
宏习惯于这样:
class ComponentBase : public IComponent
{
COMPONENT(ComponentBase)
};
class ComponentDerived1 : public ComponentBase
{
COMPONENT_DERIVED(ComponentDerived1, ComponentBase)
};
以上是完全正确的。但是,我希望在这种情况下发生编译错误:
class ComponentDerived2 : public ComponentDerived1
{
COMPONENT_DERIVED(ComponentDerived2, ComponentBase)
// ^^^^^^^^^^^^^
// This type claims to have a superclass of ComponentBase in the above macro,
// but we really derive from ComponentDerived1.
//
// I want this to result in a compile error.
};
也就是说,当我声称我的父类(super class)(或我的基类)是 ComponentBase
而我的父类(super class)实际上是 ComponentDerived1
时,我理想情况下喜欢编译时错误。
我无法轻易检测到这种情况的原因是,虽然我的父类(super class)是 ComponentDerived1
,但该类的父类(super class)是 ComponentBase
— 因此它也是我的基类之一类。 (我知道 ComponentDerived1
是一个 ComponentBase
,所以也许有比“基类”更好的短语。)
有一些评论质疑我为什么要这样做。我正在使用优化的组件生成系统,它将所有相同类型的对象放入离散缓冲区,因此如果我想拥有一个 API,例如 getComponentsThatImplement(ComponentDerived1::getType() );
。
我一起砍过one solution适用于 g++:
class ComponentBase : public IComponent
{
COMPONENT(ComponentBase)
protected:
static void helperComponentBase(); // COMPONENT(ComponentBase)
};
class ComponentDerived1 : public ComponentBase
{
COMPONENT_DERIVED(ComponentDerived1, ComponentBase)
private:
using ComponentBase::helperComponentBase; // COMPONENT_DERIVED(..., ComponentBase)
};
class ComponentDerived2 : public ComponentDerived1
{
COMPONENT_DERIVED(ComponentDerived2, ComponentBase)
private:
using ComponentBase::helperComponentBase; // error: this function is already hidden
}
不幸的是,Xcode 4.3.2 的 clang 似乎不支持以这种方式使用 using
。我检查了 boost 的类型特征库,但没有发现任何有用的信息。我使用的是 C++11,因此我可以使用现代结构。
还有其他聪明的想法吗?
最佳答案
你可以利用这样一个事实,即你不能从一个 c'tor 直接调用你的 super 的 super 的 c'tor:
enum PATERNITY_TEST_ENUM { PATERNITY_TEST };
#define COMPONENT(CLASS) \
public: CLASS(PATERNITY_TEST_ENUM) { } private:
#define COMPONENT_DERIVED(CLASS, SUPER) \
public: CLASS(PATERNITY_TEST_ENUM) : SUPER(PATERNITY_TEST) { } private:
关于c++ - 无法验证我的父类(super class)或基类是否是宏或模板所声称的那样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9935313/
我正在尝试解决为什么 Ruby 没有用空格分割我的字符串。例如: [1] pry(#)> msg => "!iex [email protected]|[email protected]> Firs
我正在尝试解决为什么 Ruby 没有用空格分割我的字符串。例如: [1] pry(#)> msg => "!iex [email protected]|[email protected]> Firs
这是我的 API 端点: [HttpPost] public int Post(SearchHistory searchHistory) { IDashboardRepository dash
我正在按照these guidelines验证来自Facebook API的signed_request参数。 ,但我在调用 Commons Codec 中的 Base64 类的某些方法时遇到了问题。
我有一个 json 结构数组: { data : [ { "num" : val , "time" : val } , ... ] } 我需要找到 num 的最大值和最短/最长时间,以及将对象移动到
我使用 Xcode 的 Refactor > Rename 命令尝试重命名 C 中的方法参数 this。 它声称 this 是“保留语言关键字”,但据我所知,事实并非如此。 这是 Xcode 中的错误
有人刚刚给我看了 A byte of Python 的旧 PDF 版本.根据本身,它是 3.0 版(本书的,而不是 Python 的),从 2014 年开始。在 Operators 部分, 有一个部分
问题: 您在 Intellij 中使用 VCS 系统并尝试提交内容。提交失败,Intellij 声称 index.lock 存在。你检查你的 repo 目录中的 .git/index.lock,发现它
我有以下 SAM 模板: AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Descriptio
这可能看起来微不足道,但我使用 Excel 来操作程序中的一些数据,然后以 tsv 格式输出数据。我想用 gnuplot 来绘制它,其复杂性不比 plot "filename" 复杂,但 gnuplo
我正在使用嵌入式 Jetty 启动标准 Java 网络应用程序。我的启动器是这样的: import org.eclipse.jetty.server.Server; import org.eclips
我正在阅读 Joshua Bloch 的 Effective Java,第 2 版,第 11 条:明智地覆盖克隆。 在第 56 页,他试图解释当我们重写某些类(如集合类)的 clone() 时,我们必
问题: 如 Fusion Location Provider API 所声称的,位置更新在室内不起作用。 发生了什么: 我尝试在我的 Android 应用程序中使用 LocationClient 实现
所以我只是尝试使用 NDK 构建一个库。我相信 Android.mk 和 Application.mk 文件是正确的,但它们是否正确无关紧要。 在NDK目录下执行make APP=hello时 And
我在 Android Studio 中尝试为我的模拟器安装 HAXM 时遇到了困难。我有一台 hp2000 笔记本;我将 Windows 8.1 更新到 Windows 8.1 Pro 以激活 Hyp
在我的程序中,我正在下载 misc。 PDF 文档,最后我想使用 Apache pdfbox (v1.8.8) 将它们合并到一个组合文档中。出于某种奇怪的原因,PDFMergerUtility 未能声
我正在尝试使用预先编写的接口(interface)编写队列类。接口(interface)包含方法 public void enqueue(T element); 我的类(class)看起来像 impo
有这样的东西: $(document).ready(function() { $("#myTable").dataTable({
我最近将一个 Android 应用程序从 Eclipse 移植到 Android Studio。我能够调试应用程序,甚至能够构建一个供客户端测试的发布版本。不幸的是,我不能再调试了。当我尝试从 And
每次,我在 Gerrit 中看到我的更改的 merged 状态并且我执行 git pull origin,我可以清楚地看到,我的更改/分支实际上没有已 merge 到 master 中。 请检查我的
我是一名优秀的程序员,十分优秀!