这个问题的关键是帮助单元测试.如果我有一个繁忙的__init__(即__init__复杂的初始化),我不能简单地实例化一个类的对象,但我需要模拟/存根调用在依赖关系中的所有方法__init__.
为了说明这个问题,这里是一个例子:
class SomeClass(object):
def __init__(self, dep1, dep2, some_string):
self._dep1 = dep1
self._dep2 = dep2
self._some_string = some_string
# I would need to mock everything here (imagine some even more
# complicated example)
for dep2element in self._dep2:
dep2element.set_dep(dep1)
self._dep1.set_some_string(some_string)
def fun1(self):
...
def fun2(self):
...
def fun3(self):
...
Run Code Online (Sandbox Code Playgroud)
要测试这些fun*功能,每个测试都必须执行复杂的构造.
class TestSomeClass(TestCase):
def create_SomeClass(self, some_string):
dep1 = Mock()
# mock everything required by SomeClass' constructor
dep2 = Mock()
# mock everything required by …Run Code Online (Sandbox Code Playgroud) 尽管有很多关于 reinterpret_cast 主题的文章,以及它有多糟糕,但我仍然对避免它的最佳方法感到困惑,尤其是在处理诸如从 fstream 读取和写入之类的函数时。所以,这是我的困境......
假设我们有一个整数数组,我们想用文件中的一些数据填充它。
std::ifstream iFile( ... );
// presume that the type of this array is not a matter of choice
int *a = new int[ 100 ];
Run Code Online (Sandbox Code Playgroud)
我们可以阅读一些不同的演员表:
iFile.read( (char *)a, sizeof( int ) * 100 );
iFile.read( reinterpret_cast< char * >( a ), sizeof( int ) * 100 );
iFile.read( static_cast< char * >( static_cast< void * >( ( a ) ), sizeof( int ) * 100 );
Run Code Online (Sandbox Code Playgroud)
第一个(C 风格)已经过时,我们在 C++ 中引入了新的风格转换,这是有充分理由的。第二个是不可移植的,不提供任何保证。第三个写起来很乏味,破坏了乐趣。
有什么替代方法吗,我应该怎么做?
编辑:
目标是使代码尽可能可移植且符合标准。
是否可以为bash脚本实现子命令.我有这样的想法:
http://docs.python.org/dev/library/argparse.html#sub-commands
我想了解标准关于将指针解引用到基的观点,但是我在寻找它方面没有任何进展。以这两个类为例:
class Base
{
public:
virtual void do_something() = 0;
};
class Derived : public Base
{
public:
virtual void do_something();
};
void foo2(Base *b)
{
Base &b1 = *b; // how this work by standard?
}
void foo()
{
Derived *d = new Derived();
foo2(d); // does this work by standard?
}
Run Code Online (Sandbox Code Playgroud)
因此,基本上,如果取消引用指向类型D的对象的类型B的指针,切片会在适当的位置发生,还是会临时出现?我倾向于认为临时不是一个选择,因为这意味着临时是抽象类的实例。
不管真相如何,我都希望能有一个指向ISO标准的指针。(或者第三,就此而言。:))
编辑:
我提出的观点是,暂时不作为一种选择,因为它可能会以其行为方式行事,这是很合逻辑的,但我无法在标准中找到确认,而且我也不是普通读者。
编辑2:
通过讨论,很明显,我的问题实际上是关于取消引用指针机制的,而不是关于拼接或临时的。我感谢每个人都为我做的愚蠢,最后我得到了最令我困惑的问题的答案:为什么我找不到标准的东西……显然这是错误的问题,但是我有正确的答案。
n
从QtCreator中的项目视图运行CMake("运行CMake"命令)时,会弹出CMake向导.这变得非常烦人,因为我是QtCreator新手,我不知道是否有任何补救措施.
期望的效果将是cmake的自动执行,而没有CMake向导的瘟疫.
c++ ×3
bash ×1
cmake ×1
dereference ×1
fstream ×1
iso ×1
pointers ×1
python ×1
qt-creator ×1
standards ×1
subcommand ×1