有一种不太常见的C++习语,我过去常常使用过好几次.我似乎无法记住它是否有一个通常使用的名称来描述它.
它与mixins,CRTP和类型擦除有一定关系,但并不是特别相关.
当您想要向类添加一些实现时,会发现问题,但您不希望将它放在类或它派生的任何类中.这样做的一个原因可能是类可能是继承层次结构的一部分,其中实现应该只发生一次.
暂时搁置一些问题,例如层次结构是否应该具有具体的非叶类,或者在某些情况下是否可以选择虚拟继承,我知道在模板类中提供实现的一种解决方案来源于它的模板参数.然后,这允许您在创建实例时使用模板,但之后只能通过指针使用对象或引用其中一个基础(在松散的意义上,类型擦除的位置).
一个例子可能是你有一个侵入性引用计数.你的所有类都来自一个引用计数接口,但你只希望引用计数本身和引用计数方法的实现出现一次,所以你将它们放在派生模板中 - 让我们调用它ImplementsRC<T>.现在你可以像这样创建一个实例:
ConcreteClass* concrete = new ImplementsRC<ConcreteClass>();
Run Code Online (Sandbox Code Playgroud)
我正在掩盖诸如由多个模板化重载等组成的转发构造函数.
所以,希望我已经明确了成语是什么.现在回到我的问题 - 这个成语是否有一个被接受的,或者至少是一般使用的名字?
我有一个方法,返回map定义为:
public Map<String, ?> getData();
Run Code Online (Sandbox Code Playgroud)
这个方法的实际实现对我来说并不清楚,但是,当我尝试这样做时:
obj.getData().put("key","value")
Run Code Online (Sandbox Code Playgroud)
我得到以下编译时错误消息:
方法put(String,capture#9-of?)在Map类型中不适用于参数(String,String)
问题是什么?是String不是输入任何内容?
提前致谢.
我有一些调用的代码..
x = getClass().getClassLoader();
Run Code Online (Sandbox Code Playgroud)
这会返回null.
当我从Eclipse启动相同的代码而不是命令行时,它返回一个类加载器.
我可以破解代码来做到这一点......
if (getClass().getClassLoader() == null)
{
x = ClassLoader.getSystemClassLoader().getSystemResourceAsStream( loadedPropFileName );
}
Run Code Online (Sandbox Code Playgroud)
两者都使用相同的JVM进行编译和运行.(我99.99%肯定).
任何人都有任何想法为什么第一个将为类加载器返回null?
编辑:
我的问题是"任何人都有任何想法为什么同一个类在从Eclipse启动时返回null,从命令行加载时是类加载器."
感谢Bootstap加载器必须在Eclipse中加载类的建议.我不知道为什么会这样.
我的问题是如何以编程方式将带有attachemnts的电子邮件发送到默认邮件客户端.
我的要求是:
我成功地以各种方式撰写电子邮件,添加附件不是问题,但添加嵌入式图像是.
我已将消息正文编写为HTML并集成了Base64编码的图像,但Outlook和Outlook Express无法识别图像.为什么?
有没有人能解决我的问题.
我解决了调用MAPI的一部分问题.
如果我将变量名称作为字符串,如何检索bash变量值?
var1="this is the real value"
a="var1"
Do something to get value of var1 just using variable a.
Run Code Online (Sandbox Code Playgroud)
我有一些AMI(亚马逊机器映像),我想启动每个AMI的几个实例.一旦完成启动,我想根据其AMI类型设置每个实例.我不想在任何AMI中烘焙大量脚本或密钥,因此我准备了一个通用的启动脚本,并将其放在S3上,并提供可公开访问的链接.在rc.local中,我放了一小段代码来获取启动脚本并执行它.这就是我在AMI中所拥有的一切.然后,每个AMI访问一个通用配置脚本,该脚本适用于所有AMI和每个AMI的特殊设置脚本.这些脚本是私有的,需要签名URL才能访问它们.
所以现在,当我触发AMI的一个实例(my_private_ami_1)时,我会在S3上显示另一个文件的签名URL,该文件包含所有私有脚本在键/值对方面的签名URL.
config_url="http://s3.amazo.../config?signature"
my_private_ami_1="http://s3.amazo.../ami_1?signature"
...
Run Code Online (Sandbox Code Playgroud)
当启动脚本运行时,它会下载上面的文件并且source是它.然后它检查其AMI类型并为自己选择正确的设置脚本.
ami\_type=GET AMI TYPE #ex: sets ami\_type to my\_private\_ami\_1
setup\_url=GET THE SETUP FILE URL BASED ON AMI\_TYPE # this is where this problem arises
Run Code Online (Sandbox Code Playgroud)
所以现在我可以拥有一个通用代码,它可以触发实例而不管它们的AMI类型和实例可以自己处理.
我想我知道我需要使用的#ifdefs在msvc和gcc上兼容x86-32和x86-64,见下文.这些平台是否完整?
#if defined(_MSC_VER)
# if defined(_M_IA64) || defined(_M_X64)
# define SIZEOF_SIZE_T 8
# define SIZEOF_VOIDP 8
# elif defined(_M_IX86)
# define SIZEOF_SIZE_T 4
# define SIZEOF_VOIDP 4
# else
# error "Unsupported MSVC platform"
# endif
#elif defined(__GNUG__)
# if defined(__x86_64__) || defined(__ia64__)
# define SIZEOF_SIZE_T 8
# define SIZEOF_VOIDP 8
# elif defined(__i386__)
# define SIZEOF_SIZE_T 4
# define SIZEOF_VOIDP 4
# else
# error "Unsupported GCC platform"
# endif
#endif
Run Code Online (Sandbox Code Playgroud)
从C程序员的角度来看,IA64和x86 64是否相同?
我也希望能够在Mac上编译.我要添加什么?
编辑:我不能使用sizeof(),因为我正在处理使用类似东西的不可触摸的遗留代码#if SIZEOF_VOIDP == …
当递归遍历目录结构时,如果文件多于目录,那么最有效的算法是什么?我注意到,当使用深度优先遍历时,当给定目录中存在大量文件时,似乎需要更长时间.在这种情况下,广度优先遍历是否更有效?我目前无法对这两种算法进行分析,因此非常欢迎您的见解.
编辑:为了回应alphazero的评论,我在Linux机器上使用PHP.
在RhinoMocks或Moq中,可以在调用构造函数之前设置对象的属性吗?
我正在尝试测试一种方法.
包含该方法的类在其构造函数中有一些代码依赖于某些成员被设置,遗憾的是构造函数中没有用于设置它们的参数,因此我必须通过属性设置它们.有没有办法在RhinoMocks或Moq中调用构造函数之前设置此属性?
我Rack::Reload根据这个帖子设置了
# config.ru
require 'rubygems'
require 'sinatra'
set :environment, :development
require 'app'
run Sinatra::Application
# app.rb
class Sinatra::Reloader < Rack::Reloader
def safe_load(file, mtime, stderr = $stderr)
if file == Sinatra::Application.app_file
::Sinatra::Application.reset!
stderr.puts "#{self.class}: reseting routes"
end
super
end
end
configure(:development) { use Sinatra::Reloader }
get '/' do
'foo'
end
Run Code Online (Sandbox Code Playgroud)
使用thin via运行thin start -R config.ru,但它只重新加载新添加的路由.当我更改现有路由时,它仍然运行旧代码.
当我添加新路由时,它正确地重新加载它,因此它是可访问的,但它不会重新加载任何其他内容.
例如,如果我将路线更改为
get '/' do
'bar'
end
get '/foo' do
'baz'
end
Run Code Online (Sandbox Code Playgroud)
比/仍将担任foo,即使它已经改变,但/foo会正确地重新加载和服务baz …
java ×2
64-bit ×1
algorithm ×1
arguments ×1
bash ×1
c ×1
c# ×1
c++ ×1
classloader ×1
client ×1
crtp ×1
eclipse ×1
email ×1
embedding ×1
generics ×1
idioms ×1
image ×1
itanium ×1
javascript ×1
map ×1
mixins ×1
mocking ×1
moq ×1
portability ×1
rack ×1
reloading ×1
rhino-mocks ×1
ruby ×1
sinatra ×1
string ×1
type-erasure ×1
unit-testing ×1
vim ×1
wildcard ×1