文档没有说buildvs vs install做什么
我的期望是它就像make install; 即它需要编译的东西并放入它的最终位置(/usr/local/bin/my_new_toy或其他任何东西),但似乎它放入了东西GOROOT/bin
我可以告诉你做一个make install- 即把东西放在别的地方吗?或者我只是写一个makefile(请告诉我没有)?
我一直认为必须使用指针进行多态性.使用规范示例:
DrawEngine::render(Shape *shape)
{
shape->draw();
shape->visible(true);
}
Run Code Online (Sandbox Code Playgroud)
并将指针传递给各种Shape派生类.它与引用一样吗?
DrawEngine::render(Shape &shape)
{
shape.draw();
shape.visible(true);
}
Run Code Online (Sandbox Code Playgroud)
甚至有效:
engine.render(myTriangle); // myTriangle instance of class derived from Shape
Run Code Online (Sandbox Code Playgroud)
如果这样可行,这两种情况之间是否存在差异?我试图在Stroustrup中找到信息,但我一无所获.
我重新打开了这个,因为我想再探索一下.
所以至少有一个区别是dynamic_cast.对我来说,多态性包括使用dynamic_cast.
我可以去吗
Rhomboid & r = dynamic_cast<Rhomboid &>(shape);
Run Code Online (Sandbox Code Playgroud)
如果演员表失败会怎么样?这有什么不同吗?
Rhomboid * r = dynamic_cast<Rhomboid*>(&shape);
Run Code Online (Sandbox Code Playgroud) 假设我有
IEnumerable<string> Foo()
{
try
{
/// open a network connection, start reading packets
while(moredata)
{
yield return packet;
}
}
finally
{
// close connection
}
}
Run Code Online (Sandbox Code Playgroud)
(或许我做了'使用' - 同样的事情).如果我的来电者去了会怎么样
var packet = Foo().First();
Run Code Online (Sandbox Code Playgroud)
我刚刚离开了泄漏的连接.什么时候最终被调用?或者正确的事情总是通过魔法发生
用答案和想法编辑
我的示例和其他'普通'(foreach,..)调用模式将很好地工作,因为它们处理IEnumerable(实际上是GetEnumerator返回的IEnumerator).因此,我必须在某个地方设置一个可以做一些时髦的事情(明确地获取一个枚举器而不是处理它等).我会让他们开枪
糟糕的代码
我找到了一个来电者
IEnumerator<T> enumerator = foo().GetEnumerator();
Run Code Online (Sandbox Code Playgroud)
变成
using(IEnumerator<T> enumerator = foo().GetEnumerator())
Run Code Online (Sandbox Code Playgroud) 如果我想用POCO读写mongo数据
public class Thingy
{
public string Foo {get;set;}
}
...
coll.Insert(new Thing(Foo = "hello"));
Run Code Online (Sandbox Code Playgroud)
当我回读时,我得到一个失败,说_id是一个意外的属性(它是).然后我在课堂上添加了一个名为_id的字段.现在插入不起作用,说_id字段不能为null.一个尝试过的BsonIgnoreIfNull属性,它没有用.
有没有办法将shell查询语法中表达的查询提交给mongo c#驱动程序
例如,像
Coll.find { "myrecs","$query : { x : 3, y : "abc" }, $orderby : { x : 1 } } ");
Run Code Online (Sandbox Code Playgroud)
以shell指南为例
我有一个代表DB对象的地图.我希望从中得到"众所周知"的价值观
std::map<std::string, std::string> dbo;
...
std::string val = map["foo"];
Run Code Online (Sandbox Code Playgroud)
一切都很好但是我觉得"foo"在每次通话时都被转换为临时字符串.当然,拥有一个常量的std :: string会更好(当然,与刚刚获取对象的磁盘IO相比,它可能只是一个很小的开销,但我认为它仍然是一个有效的问题).那么std :: string常量的正确习惯是什么?
例如 - 我可以
const std::string FOO = "foo";
Run Code Online (Sandbox Code Playgroud)
在hdr中,但后来我得到了多份副本
编辑:还没有回答说如何声明std :: string常量.忽略整个地图,STL等问题.很多代码都是以std :: string为导向的(我当然是这样)并且很自然地需要为它们设置常量而不需要为内存分配反复付费
EDIT2:从曼努埃尔手中接过PDF回答的二级问题,添加了一个不好习惯的例子
编辑3:答案摘要.请注意,我没有包含那些建议创建新字符串类的内容.我很失望,因为我希望有一个简单的东西只能在头文件中工作(如const char*const).无论如何
a)来自马克b
std::map<int, std::string> dict;
const int FOO_IDX = 1;
....
dict[FOO_IDX] = "foo";
....
std:string &val = dbo[dict[FOO_IDX]];
Run Code Online (Sandbox Code Playgroud)
b)来自vlad
// str.h
extern const std::string FOO;
// str.cpp
const std::string FOO = "foo";
Run Code Online (Sandbox Code Playgroud)
c)来自Roger P.
// really you cant do it
Run Code Online (Sandbox Code Playgroud)
(b)似乎与我想要的最接近,但有一个致命的缺陷.我不能拥有使用这些字符串的静态模块级代码,因为它们可能尚未构建.我想过(a)并且实际上在序列化对象时使用类似的技巧,发送索引而不是字符串,但对于通用解决方案来说似乎有很多管道.很遗憾(c)获胜,std:string 没有简单的常量
我有一个抽象的基类
class IThingy
{
virtual void method1() = 0;
virtual void method2() = 0;
};
Run Code Online (Sandbox Code Playgroud)
我想说 - "所有提供具体实例化的类都必须提供这些静态方法"
我很想做
class IThingy
{
virtual void method1() = 0;
virtual void method2() = 0;
static virtual IThingy Factory() = 0;
};
Run Code Online (Sandbox Code Playgroud)
我知道没有编译,无论如何它还不清楚如何使用它,即使它编译.无论如何我只能这样做
Concrete::Factory(); // concrete is implementation of ITHingy
Run Code Online (Sandbox Code Playgroud)
根本没有在基类中提到工厂.
但我觉得应该有一些表达我希望实现注册的合同的方式.
这有一个众所周知的习语吗?或者我只是把它放在评论中?也许我不应该试图强迫这个
编辑:当我输入问题时,我觉得自己模糊不清.我觉得应该有一些方法来表达它.伊戈尔给出了一个优雅的答案,但实际上它表明它确实无济于事.我最终还是要做
IThingy *p;
if(..)
p = new Cl1();
else if(..)
p = new Cl2();
else if(..)
p = new Cl3();
etc.
Run Code Online (Sandbox Code Playgroud)
我想像c#,python或java这样的反射语言可以提供更好的解决方案
我需要在那里读一个文件.我尝试过Assembly.ExecutingAssembly等,但这不起作用.
我喜欢新的System.Net.Http.HttpClient类.它有一个很好的简单API,它不会抛出正常的错误.但它只是异步.
我需要代码(深入服务器内)
foo();
bar();
// compute stuff
var x = GetThingFromOtherServerViaHttp();
// compute more stuff
wiz(x);
Run Code Online (Sandbox Code Playgroud)
经典的顺序同步代码.我看到了几个类似的问题,但实际上从未真正说过"做这个".我在看
client.PostAsync.Wait()
Run Code Online (Sandbox Code Playgroud)
世界尖叫'不要这样做'.怎么样:
client.PostAsync.Result()
Run Code Online (Sandbox Code Playgroud)
这不只是伪装等待?
最后,我最终传入一个处理结果的lambda回调,然后唤醒显式等待EventWaitHandle的调用线程.很多管道.有没有更简单的东西或者我只是回到使用旧的http客户端
编辑:进一步阅读后,我怀疑这段代码与Wait和Result有相同的问题,它只是一个更长的死锁
编辑:我有MS PM最近向我确认有一个任务'可能需要> X ms(我忘了X)的任何API必须是异步',许多PM将此解释为'仅异步'(不清楚这是什么旨在).因此Document DB api只是异步.