假设我有一个 std::vector<bool> a 的类(class)和 std::vector<int> b我想要的字段 reserve()在构造函数中设置为某种大小,这对于两个容器都是相等的。鉴于 reserve()接受 size_type参数,为了完全安全,据我所知,我必须使用两个参数编写我的构造函数,这并不是特别吸引人:
MyCtor(std::vector<bool>::size_type size1, std::vector<int>::size_type size2)
{
abortIfNotEqual(size1, size2); // Proceed only if size1 == size2
a.reserve(size1);
b.reserve(size2);
}
根据我的阅读,size_type 通常与size_t相同,至少对于标准容器来说是这样,所以我可能会这样做而不会遇到任何潜在的问题:
MyCtor(std::size_t size)
{
a.reserve(size); // More readable, but is this always ok?
b.reserve(size);
}
但是,有没有更好、更安全的方式严格使用size_type无需通过特定的 container<T> 访问它对于特定类型 T ?
必须使用特定的 container<T>也很烦人,例如访问元素:for a[i] , i必须是 std::vector<bool>::size_type ,因为我假设使用例如unsigned int i会不太安全。
在这种情况下是否有一种通用的、通用的、更易读的方法?或者我应该简单地使用 size_t甚至 unsigned long int忘记这个?
最佳答案
由于您的问题的主要组成部分是如何在假设大小类型相同的情况下确保您的安全,因此我建议使用 static_assert std::is_same。这是用 c++17 编译的:
简化符号很重要,所以在这里,我在这个类上定义了一个 size_type,并在内部确保它与它所代表的两种尺寸类型相同。如果它们不匹配,则为编译时错误。
#include <vector>
class MyCtor {
std::vector<bool> a;
std::vector<int> b;
typedef std::vector<bool>::size_type st1;
typedef std::vector<int>::size_type st2;
static_assert(std::is_same<st1, st2>::value);
public:
typedef st2 size_type;
MyCtor(size_type s1, size_type s2) {}
};
特别感谢这个堆栈溢出答案:How to check if two types are same at compiletime(bonus points if it works with Boost strong typedef)其中还包括 c++11 解决方法。
关于c++ - 有没有一种方法可以将 container<T>::size_type 普遍用于不同类型的 T?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48023802/
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串
我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll