众所周知,C++中的内置枚举不是类型安全的.我想知道实现类型安全枚举的哪些类在那里使用...我自己使用以下"自行车",但它有点冗长和有限:
typesafeenum.h:
struct TypesafeEnum
{
// Construction:
public:
TypesafeEnum(): id (next_id++), name("") {}
TypesafeEnum(const std::string& n): id(next_id++), name(n) {}
// Operations:
public:
bool operator == (const TypesafeEnum& right) const;
bool operator != (const TypesafeEnum& right) const;
bool operator < (const TypesafeEnum& right) const;
std::string to_string() const { return name; }
// Implementation:
private:
static int next_id;
int id;
std::string name;
};
Run Code Online (Sandbox Code Playgroud)
typesafeenum.cpp:
int TypesafeEnum::next_id = 1;
bool TypesafeEnum::operator== (const TypesafeEnum& right) const
{ return id == right.id; }
bool TypesafeEnum::operator!= …Run Code Online (Sandbox Code Playgroud) 我的组件被传递了一个很长的值,我后来将其用作缓存中的密钥.密钥本身是长值的字符串表示,就好像它是无符号的64位值.也就是说,当我的组件被交给-2944827264075010823L时,我需要将其转换为字符串键"15501916809634540793".
我有一个解决方案,但它似乎蛮力,它让我有点不安.本质上,我将long转换为十六进制字符串表示形式(所以-2944827264075010823L变为"d721df34a7ec6cf9")并将十六进制字符串转换为BigInteger:
String longValueAsHexString = convertLongToHexString(longValue);
BigInteger bi = new BigInteger(longValueAsHexString, 16);
String longValueString = bi.toString();
Run Code Online (Sandbox Code Playgroud)
然后我使用longValueString作为缓存的密钥.
我不能使用Long.toString(longValue,16),因为它返回绝对值的十六进制字符串,前缀为" - ".
所以我的convertLongToHexString看起来像这样:
long mask = 0x00000000ffffffffL;
long bottomHalf = number & mask;
long upperHalf = (number >> 32) & mask;
String bottomHalfString = Long.toString(bottomHalf, 16);
if (bottomHalfString.length() != 8) {
String zeroes = "0000000000000000";
bottomHalfString = zeroes.substring(16-bottomHalfString.length()) + bottomHalfString;
}
return Long.toString(upperHalf,16)+bottomHalfString;
Run Code Online (Sandbox Code Playgroud)
必须有一种更优雅的方式来做到这一点.有什么建议?
通过确定性,我隐约意味着可以用于航空航天飞行软件等关键实时软件.垃圾收集器(以及动态内存分配)在飞行软件中是很大的禁忌,因为它们被认为是非确定性的.但是,我知道正在对此进行研究,所以我想知道这个问题是否已经解决了.
我还在问题中包括任何垃圾收集算法,这些算法限制了它们的使用方式.
我正在尝试在多边形算法中创建一个快速 2D点,用于命中测试(例如Polygon.contains(p:Point)).对于有效技术的建议将不胜感激.
graphics performance polygon collision-detection point-in-polygon
我有几个xml文件,其名称存储在另一个xml文件中.
我想使用xsl来生成xml文件组合的摘要.我记得有一种方法可以使用msxml扩展(我使用的是msxml).
我知道我可以使用每个文件的内容,select="document(filename)"但我不确定如何将所有这些文档合并为一个.
21 - 08年10月我应该提到,我想要做的合并XML进一步处理,所以它是不够的只是输出它的变换,我需要将其存储在一个变量设置节点.
我有一个现有的Perl程序,它使用Getopt包和Getopt::Long::Configure其中permute一个选项.但是,现在我需要保持用户输入的选项的顺序.有一个选项$RETURN_IN_ORDER中提到的Long.pm,但是似乎并没有在任何地方使用的.
当我通过时return_in_order,我收到以下错误.
getopt的::长:未知配置参数 "return_in_order" 在C:/ Program Files文件/ IBM/RationalSDLC/common/lib目录/ perl5的/ 5.8.6 /的Getopt/Long.pm线1199.
有人可以告诉我这是否得到支持,如果有的话,正确的使用方法?如果没有,我想知道我的其他选择.
谢谢.
我可能忽略了一些非常简单的东西,但我试图将所有错误的URL重定向到根据条件过滤URL的操作,然后301重定向到合适的页面或发出404页面.
为此,我在路由表的末尾有这样的路由:
routes.MapRoute("Error", "{*url}", new { controller = "Main", action = "Error" });
Run Code Online (Sandbox Code Playgroud)
这样的动作:
public ActionResult Error(string url)
{
if (/* Conditions are met... */)
{
Response.Status = "301 Moved Permanently";
Response.AddHeader("Location", /* Destination URL */);
Response.End();
}
Response.StatusCode = 404;
return View(/* 404 page... */));
}
Run Code Online (Sandbox Code Playgroud)
这在当地非常有效.
但是,当部署到IIS6时,不包含.mvc(例如oldfile.php)的URL永远不会发送到ASP.NET进程进行路由.
有一个简单的解决方案/我忽略了什么吗?
编辑:这与此问题有关,但在IIS6下,没有.mvc的URL不会被发送用于ASP.NET MVC处理.
我对我遇到的一些PHP语法感到有些困惑.这是一个例子:
$k = $this->_tbl_key;
if( $this->$k)
{
$ret = $this->_db->updateObject( $this->_tbl, $this, $this->_tbl_key, $updateNulls );
}
else
{
$ret = $this->_db->insertObject( $this->_tbl, $this, $this->_tbl_key );
}
Run Code Online (Sandbox Code Playgroud)
我的问题基本上是什么$this->$k意思?我认为这可能意味着成员变量的名称是什么$this->_tbl_key,但是如何工作?是否可以在运行时将成员变量添加到类中?
在数据处理中,我经常需要创建一个查找数据结构来将一个标识符映射到另一个标识符.作为一个具体的例子,让我们采用一个结构,该结构在一个国家的2个字符代码和它的全名之间保持一对一的映射.我们会在其中
AD -> Andorra
AE -> United Arab Emirates
AF -> Afghanistan
Run Code Online (Sandbox Code Playgroud)
保存此地图的变量有什么好名字?一些想法(我将使用驼峰名称):
countryNameByCode
nameByCodeLookup
nameCodeLookup
codeToName
Run Code Online (Sandbox Code Playgroud) __construct()在PHP中使用构造函数代替类的名称是否有任何优势?
示例(__construct):
class Foo {
function __construct(){
//do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
示例(命名):
class Foo {
function Foo(){
//do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
__construct从PHP 5开始,可以使用该方法(第一个示例).
从PHP版本4到版本7,可以使用与类相同的方法作为构造函数(第二个示例).
php ×2
algorithm ×1
asp.net-mvc ×1
c++03 ×1
constructor ×1
enumeration ×1
enums ×1
getopt ×1
graphics ×1
iis-6 ×1
java ×1
msxml ×1
oop ×1
performance ×1
perl ×1
polygon ×1
real-time ×1
redirect ×1
syntax ×1
type-safety ×1
unsigned ×1
xml ×1
xslt ×1