小编Mar*_*ork的帖子

此代码似乎实现了在C++中返回空引用

我的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的指针(使其成为空指针),然后应用解除引用运算符分配给引用类型(返回类型)的上下文,它应该为我提供对指针指向的同一对象的引用.这看起来像是向我返回一个空引用.

任何解释为什么这个工作(或为什么不应该)的建议将不胜感激.

谢谢,查克

c++

13
推荐指数
4
解决办法
2019
查看次数

当fopen失败时需要fclose吗?

请考虑以下代码段.

{
....
FILE *fptr = fopen("file_that_does_not_exist","r");
...
}
Run Code Online (Sandbox Code Playgroud)

在这里,如果fopen失败,我们还需要调用fclose()进行一些清理吗?

c c++

13
推荐指数
2
解决办法
5215
查看次数

Java JAXB优点/缺点和文档

自从我愤怒地使用Java以来​​已经有一段时间了,如果这很愚蠢,请原谅我.

我刚开始使用Java项目,我们使用JAXB对传入的XML字符串(来自Jetty Server)进行反序列化.该项目仅针对此情况使用JAXB.

JAXB有哪些替代方案?
JAXB对这些替代方案的优缺点是什么?

我已经做了一些谷歌搜索并找到了很多参考资料,但是有一个确定的来源是JAXB问题的转到的地方,或者人们只是看到人们在做什么并从那里解释.

谢谢.

java documentation jaxb

12
推荐指数
2
解决办法
9651
查看次数

如何在触摸时跟踪手指移动以绘制平滑曲线?

喜欢我想要的是如果我在iphone屏幕上快速移动我的手指,那么我想要一些使用石英2d或opengl es做出适当曲线的东西.

我想画一条曲线风格的路径......我曾经看过GLPaint(OpenglES)的例子,但考虑到你的手指移动速度快,它不会帮助我很多.....

像制作一条平滑的曲线......任何人都有某种例子请告诉我

谢谢

编辑:从以下答案移开:

谢谢大家.......

但我曾尝试过两个控制点的bezier曲线算法,但问题首先是如何计算控制点是否没有预定义点....

正如我所提到的,我的手指运动速度很快......所以大部分时间我都是直线而不是曲线,因为接触点数量较少......

现在,作为标记所说的分段时尚,ihad试着考虑前四个触摸点并将它们渲染到屏幕上,然后删除第一个点然后再去寻找接下来的四个点.第1步:1,2,3,4步骤2:2,3,4,5就像在那种方法中我得到重叠,这实际上不是问题,但没有得到平滑的曲线.... ....

但为了快速移动手指我必须找到别的东西?????

iphone objective-c

12
推荐指数
2
解决办法
4759
查看次数

随机森林的LGPL机器学习 - C++

我正在寻找一个具有以下功能的库:

  1. 随机森林学习和分类的简约学

  2. LGPL许可

  3. 在C++中

  4. CMake构建系统 - 不是强制性的

到目前为止,华夫饼看起来不错,还有其他任何竞争者吗?

c++ lgpl machine-learning

12
推荐指数
1
解决办法
7193
查看次数

获取成员的类型

注意:这个问题最初是在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)

但是,不必强制用户指定我想要编译器以实用方式生成它的成员的类型. …

c++ templates template-meta-programming c++03

12
推荐指数
2
解决办法
6584
查看次数

初始化的C++捕获移动是const吗?

我试图将局部变量移动到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)

c++ lambda c++14

12
推荐指数
1
解决办法
990
查看次数

指针和容器

我们都知道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)

c++ containers stl smart-pointers

11
推荐指数
1
解决办法
2835
查看次数

如何将结构模板标记为朋友?

我有这样的代码:

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)

为模板提供友谊的正确语法是什么?

c++ syntax templates class friend

11
推荐指数
2
解决办法
6599
查看次数

C++将时间字符串转换为纪元的秒数

我有一个字符串,格式如下:

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)

c c++ time platform-independent

11
推荐指数
3
解决办法
2万
查看次数