我的C++知识有些零碎.我正在重新编写一些代码.我更改了一个函数来返回对类型的引用.在里面,我根据传入的标识符查找对象,然后返回对象的引用(如果找到).当然,如果我找不到对象,我会遇到要返回的问题,并且在环顾网络时,许多人声称在C++中返回"空引用"是不可能的.基于这个建议,我尝试了返回成功/失败布尔值的技巧,并使对象引用为out参数.但是,我遇到了需要初始化我将作为实际参数传递的引用的障碍,当然也没有办法做到这一点.我退回到通常只返回指针的方法.
我问了一位同事.他经常使用以下技巧,这是最新版本的Sun编译器和gcc都接受的:
MyType& someFunc(int id)
{
// successful case here:
// ...
// fail case:
return *static_cast<MyType*>(0);
}
// Use:
...
MyType& mt = somefunc(myIdNum);
if (&mt) // test for "null reference"
{
// whatever
}
...
Run Code Online (Sandbox Code Playgroud)
我一直在维护这个代码库,但我发现我没有足够的时间来查找我想要的语言的小细节.我一直在挖掘我的参考书,但这个答案让我望而却步.
现在,我在几年前开设了一门C++课程,其中我们强调在C++中,一切都是类型,所以我在考虑事情时会尽量记住这一点.解构表达式:" static_cast <MyType >(0);",在我看来,我们确实采用了字面零,将其转换为指向MyType的指针(使其成为空指针),然后应用解除引用运算符分配给引用类型(返回类型)的上下文,它应该为我提供对指针指向的同一对象的引用.这看起来像是向我返回一个空引用.
任何解释为什么这个工作(或为什么不应该)的建议将不胜感激.
谢谢,查克
请考虑以下代码段.
{
....
FILE *fptr = fopen("file_that_does_not_exist","r");
...
}
Run Code Online (Sandbox Code Playgroud)
在这里,如果fopen失败,我们还需要调用fclose()进行一些清理吗?
自从我愤怒地使用Java以来已经有一段时间了,如果这很愚蠢,请原谅我.
我刚开始使用Java项目,我们使用JAXB对传入的XML字符串(来自Jetty Server)进行反序列化.该项目仅针对此情况使用JAXB.
JAXB有哪些替代方案?
JAXB对这些替代方案的优缺点是什么?
我已经做了一些谷歌搜索并找到了很多参考资料,但是有一个确定的来源是JAXB问题的转到的地方,或者人们只是看到人们在做什么并从那里解释.
谢谢.
喜欢我想要的是如果我在iphone屏幕上快速移动我的手指,那么我想要一些使用石英2d或opengl es做出适当曲线的东西.
我想画一条曲线风格的路径......我曾经看过GLPaint(OpenglES)的例子,但考虑到你的手指移动速度快,它不会帮助我很多.....
像制作一条平滑的曲线......任何人都有某种例子请告诉我
谢谢
谢谢大家.......
但我曾尝试过两个控制点的bezier曲线算法,但问题首先是如何计算控制点是否没有预定义点....
正如我所提到的,我的手指运动速度很快......所以大部分时间我都是直线而不是曲线,因为接触点数量较少......
现在,作为标记所说的分段时尚,ihad试着考虑前四个触摸点并将它们渲染到屏幕上,然后删除第一个点然后再去寻找接下来的四个点.第1步:1,2,3,4步骤2:2,3,4,5就像在那种方法中我得到重叠,这实际上不是问题,但没有得到平滑的曲线.... ....
但为了快速移动手指我必须找到别的东西?????
注意:这个问题最初是在2012年提出的.在说明decltype符由任何主要编译器完全实现之前.除非您只能访问C++ 03,否则不应该查看此代码.现在所有符合C++ 11标准的主要编译器都支持decltype.
有没有一种简单的方法来检索成员的类型?
在C++ 03中
struct Person
{
std::string name;
int age;
double salary;
};
int main()
{
std::vector<Person> people; // get a vector of people.
std::vector<GET_TYPE_OF(Person::age)> ages;
ages.push_back(people[0].age);
ages.push_back(people[10].age);
ages.push_back(people[13].age);
}
Run Code Online (Sandbox Code Playgroud)
我实际上是这样做的(即稍微懒惰):
#define BuildType(className, member, type) \
struct className ## member: TypeBase<className, type> \
{ \
className ## member() \
: TypeBase<className, type>(#member, &className::member) \
{} \
}
BuildType(Person, name, std::string);
BuildType(Person, age, int);
BuildType(Person, salary, double);
typedef boost::mpl::vector<Personname, Personage, Personsalary> FunckyMTPMap;
Run Code Online (Sandbox Code Playgroud)
但是,不必强制用户指定我想要编译器以实用方式生成它的成员的类型. …
我试图将局部变量移动到lambda的捕获.
#include <thread>
#include <iostream>
// Moveable but not copyable object.
class WorkUnit
{
public:
WorkUnit(int) {}
WorkUnit(WorkUnit&&) noexcept {}
WorkUnit& operator=(WorkUnit&&) noexcept {return *this;}
WorkUnit(WorkUnit const&) = delete;
WorkUnit& operator=(WorkUnit const&) = delete;
// Non const function.
void doWork()
{
std::cerr << "Work\n";
}
};
int main()
{
WorkUnit data(4);
// Use C++14 generalized lambda capture.
std::thread test([data{std::move(data)}]()
{
// here it is complaining the `data` is a const value.
// Is there a way to capture this as …Run Code Online (Sandbox Code Playgroud) 我们都知道RAW指针需要用某种形式的智能指针包装来获得Exception安全内存管理.但是当涉及指针容器时,问题变得更加棘手.
std容器坚持包含的对象是可复制的,因此这排除了使用std :: auto_ptr,尽管你仍然可以使用boost :: shared_ptr等.
但是也有一些明确设计的boost容器可以安全地保存指针:
请参阅指针容器库
问题是:在什么条件下,我更喜欢在smart_pointers容器上使用ptr_containers?
boost::ptr_vector<X>
or
std::vector<boost::shared_ptr<X> >
Run Code Online (Sandbox Code Playgroud) 我有这样的代码:
template <typename T, typename U> struct MyStruct {
T aType;
U anotherType;
};
class IWantToBeFriendsWithMyStruct
{
friend struct MyStruct; //what is the correct syntax here ?
};
Run Code Online (Sandbox Code Playgroud)
为模板提供友谊的正确语法是什么?
我有一个字符串,格式如下:
2010-11-04T23:23:01Z
Z表示时间是UTC.
我宁愿将其存储为一个时间点,以便比较容易.
这样做的推荐方法是什么?
目前(在quck搜索之后),简化算法是:
1: <Convert string to struct_tm: by manually parsing string>
2: Use mktime() to convert struct_tm to epoch time.
// Problem here is that mktime uses local time not UTC time.
Run Code Online (Sandbox Code Playgroud)