我正在考虑将跨平台项目从Visual C++,XCode和makefile中的单独构建管理系统切换到CMake.
我需要的一个基本功能是自动将目录中的所有文件添加到目标.虽然这很容易用make做,但使用Visual C++和XCode并不容易做到(如果我错了,请纠正我).是否可以直接在CMake中进行?怎么样?
在学习CMake之前,请随意添加我应该注意的任何其他事情,考虑到目前该项目是中等规模的(8个库,2个可执行文件,8个测试项目,它取决于大约8个外部库).
当ASSERT_*宏导致测试用例终止时,EXPECT_*宏继续进行评估.我想知道决定是否使用其中一个的标准.
现在我主要用C/C++开发,但我在Python中编写了一些小实用程序来自动执行某些任务,我真的很喜欢它作为语言(尤其是生产力).
除了性能之外(由于易于将Python与C模块连接起来,有时可以解决这个问题),您是否认为在开发独立的复杂应用程序时适合生产使用(例如想到文字处理器)或图形工具)?
你会建议什么IDE?在我看来,即使对于小型项目,用Python提供的IDLE也是不够的.
反正有没有在C++中有一种虚拟静态成员?
例如:
class BaseClass {
public:
BaseClass(const string& name) : _name(name) {}
string GetName() const { return _name; }
virtual void UseClass() = 0;
private:
const string _name;
};
class DerivedClass : public BaseClass {
public:
DerivedClass() : BaseClass("DerivedClass") {}
virtual void UseClass() { /* do something */ }
};
Run Code Online (Sandbox Code Playgroud)
我知道这个例子是微不足道的,但是如果我有一个复杂数据的向量,对于所有派生类来说总是相同但需要从基类方法访问?
class BaseClass {
public:
BaseClass() {}
virtual string GetName() const = 0;
virtual void UseClass() = 0;
};
class DerivedClass : public BaseClass {
public:
DerivedClass() {}
virtual string …Run Code Online (Sandbox Code Playgroud) 如果我的问题太长而且技术性很强,我很抱歉,但我认为其他人对此感兴趣非常重要
我正在寻找一种方法来清楚地将一些软件内部结构与它们在c ++中的表示分开
我有一个泛型参数类(稍后存储在容器中),它可以包含boost :: any类的任何类型的值
我有一个这样的基类(大致)(当然还有更多的东西)
class Parameter
{
public:
Parameter()
template typename<T> T GetValue() const { return any_cast<T>( _value ); }
template typename<T> void SetValue(const T& value) { _value = value; }
string GetValueAsString() const = 0;
void SetValueFromString(const string& str) const = 0;
private:
boost::any _value;
}
Run Code Online (Sandbox Code Playgroud)
派生类有两个级别:第一级定义类型和转换为/来自字符串(例如ParameterInt或ParameterString)第二级定义行为和真实创建者(例如从ParameterInt或ParameterFilename中派生ParameterAnyInt和ParameterLimitedInt)的genericstring)
根据实际类型,我想添加外部函数或根据特定参数类型操作的类,而不向基类添加虚方法,也不做奇怪的转换
例如,我想根据参数类型创建适当的gui控件:
Widget* CreateWidget(const Parameter& p)
Run Code Online (Sandbox Code Playgroud)
当然我无法理解真正的参数类型,除非我使用RTTI或自己实现(使用枚举和开关案例),但这不是正确的OOP设计解决方案,你知道.
经典的解决方案是访客设计模式http://en.wikipedia.org/wiki/Visitor_pattern
这种模式的问题是我必须事先知道将实现哪些派生类型,所以(将维基百科和我的代码中写的内容放在一起)我们将有以下几种:
struct Visitor
{
virtual void visit(ParameterLimitedInt& wheel) = 0;
virtual void visit(ParameterAnyInt& engine) = 0;
virtual void visit(ParameterFilename& body) …Run Code Online (Sandbox Code Playgroud) 我正在学习Rails,我的实验目标是实现类似于Zoho Creator,Flexlist或Mytaskhelper的东西,即用户可以创建自己的数据库模式和视图的应用程序.追求这个的最佳策略是什么?
我看到了一些关于Entity-Attribute-Value的内容,但我不确定它是否是最好的策略,或者Rails中是否有一些支持.
如果Rails中有关于类似项目的任何教程,那就太好了.
可能它不是学习新语言和框架的最简单的明星,但是很长一段时间以来我真的打算这样做.
我需要从构建不同版本的应用程序的同一个 bash 脚本 (msys) 中调用 vcvars32.bat 和 vcvars64.bat。
问题是,即使我能够使用 cmd.exe 命令调用批处理文件,一旦它返回,Visual Studio 变量显然不会设置。
我无法从调用 bash 脚本的外部批处理文件(如 msys.bat)调用 vcvars,因为我需要在同一脚本中依次调用它们。
那么,有没有办法调用 vcvars 以便在运行时正确设置 bash 脚本中的变量?
我们正在销售用 wxWidgets 开发的图像处理应用程序(大约 12 万行代码)。我们计划一切尽可能跨平台,以防需要从 Windows 移植到其他操作系统。事实上,我们将实现一个 Mac 版本。我们还没有在 Mac 上测试 wxWidest,但我们还没有读到关于它的很好的东西。
总的来说,你认为从 wxWidgets 移植到 QT 值得吗?你相信这将是一项艰巨而漫长的工作吗?
QT for Mac 是否比 wxWidgets 实现好得多?
QT 是不是比 wxWidgets 更有效率?
我想补充一点,我们不想保留 gui 的代码库,所以选择只是 wxWidgets 与 QT。
我需要一个关联容器,它让我通过一个字符串索引一个特定的对象,但这也保持了插入的顺序,所以我可以通过它的名字查找一个特定的对象,或者只是迭代它并按照我插入的相同顺序检索对象他们.
我认为链接列表和哈希映射的这种混合应该可以完成这项工作,但在我尝试使用之前std::tr1::unordered_map认为它以我所描述的方式工作之前,但事实并非如此.那么有人可以解释一下我的意思和行为unordered_map吗?
@wesc:我确定std :: map是由STL实现的,而我确定std :: hash_map不在STL中(我认为旧版本的Visual Studio将它放在名为stdext的命名空间中).
@cristopher:所以,如果我做对了,差异在于实现(以及性能),而不是它在外部的行为方式.
我正在开发一个应用程序,它有很多文本和不同的模块,可以包含或不包含在每个构建中.
对于每个保存的项目,我们自动生成一个包含所有详细信息的报告(即该项目中使用的算法的描述等).目前我们在源代码中将所有文本嵌入为字符串,并且我们还通过po和mo文件支持不同的语言.
系统的优点是动态生成文档和报告文件非常容易.不好的一点是,源代码中有大量文本是丑陋的,格式化(即使用html)不舒服,编辑文本很困难,没有简单的拼写检查和翻译可怕.
所以,最后一个问题是:你宁愿在代码中嵌入文档还是为不同语言编写外部文档文件(例如html)并在运行时解析它们?显然,软件的核心文本,如我们的消息框无论如何都会保留在代码中.
如果重要的话,我正在使用wxWidgets在C++中工作.
假设我们有一个具有虚方法的基类:
class BaseClass
{
virtual void MethodToOverride() const
{
DoSomething();
}
};
Run Code Online (Sandbox Code Playgroud)
一个派生类覆盖了该方法(取决于我们可以再次虚拟或不再虚拟的情况):
class DerivedClass : public BaseClass
{
void MethodToOverride() const
{
DoSomethingElse();
}
}
Run Code Online (Sandbox Code Playgroud)
如果我们犯了一个错误,例如定义MethodToOverride非const或错误的字符,我们只需定义一个新方法,例如:
void MethodToOverride() {} // I forgot the const
void MthodToOverride() const {} // I made a typo
Run Code Online (Sandbox Code Playgroud)
因此编译很好,但在运行时会导致不必要的行为.
有没有办法将函数定义为现有函数的显式覆盖,所以如果我错误地定义它,编译器会发出警告?像(我知道它不存在)的东西:
void MethodToOverride() const overrides BaseClass::MethodToOverride() const {}
Run Code Online (Sandbox Code Playgroud) 我需要对可以有一个共同根目录的文件名进行排序,然后是不一致填充的数字; 一个示例是在Windows中重命名多个文件时获得的示例.
filenamea(1).txt filenamea(2).txt ... filenamea(10).txt ... filenamea(100).txt ... filenameb.txt ... filenamec(1).txt filenamec(2).文本
等等...
c++ ×8
bash ×1
batch-file ×1
cmake ×1
database ×1
filenames ×1
googletest ×1
ide ×1
macos ×1
oop ×1
overriding ×1
python ×1
qt ×1
schema ×1
sorting ×1
tr1 ×1
unit-testing ×1
virtual ×1
visitors ×1
wxwidgets ×1