小编0x4*_*2D2的帖子

使用匿名模板类型混淆语法?

template <class T, class U> decltype(*(T*)(0) * *(U*)(0)) mul(T x, U y) {
   return x * y;
}
Run Code Online (Sandbox Code Playgroud)

这段代码取自Stroustrup的C++ 11 FAQ.我理解它的作用,它是两个不同类型的对象相乘.令我困惑的是模板参数和函数定义之间的语法.里面发生了什么decltype?我认为它取消引用一个T初始化为0的未命名U指针,并将它与一个未命名的指针相乘,并以相同的方式进行解引用和初始化.我对吗?

好吧,如果这是正在发生的事情,那么指针,解引用和额外括号的使用是不是多余的?我不能在保持预期效果的同时初始化这样的类型吗?:

template <class T, class U> decltype(T(0) * U(0)) mul(T x, U y) {
   return x * y;
}
Run Code Online (Sandbox Code Playgroud)

这对我来说看起来更干净,并且当像第一个那样乘以两个数字时它确实具有相同的效果......

mul(4, 3); // 12
Run Code Online (Sandbox Code Playgroud)

那么为什么Stroustrup坚持使用复杂的指针,解引用和初始化语法?当然,这是在他介绍新auto语法之前.但无论如何,我的问题是:上述两种形式的初始化之间有什么区别吗?他在哪里使用指针并立即取消引用它们而不是简单地做我所做的,这是用没有指针或解除引用来初始化类型?任何回应表示赞赏.

c++ c++11

5
推荐指数
2
解决办法
195
查看次数

使用基类的静态函数而不指定参数以避免歧义

我的一些基类获得了大量的参数.现在我想指定要使用的静态函数:

template <typename... Types>
struct SBase {
    static void func() {
    }
};

struct A : public SBase<int> {
};

struct B : public A, public SBase<int, double, short,
    unsigned int, float, unsigned char, long, unsigned long> {

    // using SBase::func; // Not possible.
    // Horrible, but works.
    using SBase<int, double, short,
    unsigned int, float, unsigned char, long, unsigned long>::func;
};
Run Code Online (Sandbox Code Playgroud)

您可以看到,我需要两次编写模板参数,这会导致代码重复.

有没有办法摆脱它?

c++ class-template c++11

5
推荐指数
1
解决办法
176
查看次数

G++:错误:无法识别的选项“-soname”

我正在尝试在 64 位 Ubuntu 12.04 上构建 SLitrani。我已经从源代码构建了 ROOT 5.34.03,我确实弄清楚了如何为 $ROOTDEV 设置 LD_LIBRARY_PATH 和 PATH 变量,所以问题不存在,但是当我尝试制作 SplineFit 时,我得到了

>>> g++: error: unrecognized option ‘-soname=libSplineFit.so’
make: *** [libSplineFit.so] Error 1
Run Code Online (Sandbox Code Playgroud)

我也没有改变所有-m32-m64在Makefile中,所以我不知道是怎么回事。我能够安装 TwoPad,但无法从 SplineFit 继续。我已经在这个版本上工作了很长一段时间,希望得到任何帮助。

g++

5
推荐指数
1
解决办法
7596
查看次数

C++构造函数基于参数类型调用另一个构造函数

我有这门课

class XXX {
    public:
        XXX(struct yyy);
        XXX(std::string);
    private:
        struct xxx data;
};
Run Code Online (Sandbox Code Playgroud)

第一个构造函数(使用结构)很容易实现.第二个我可以以特定格式分开一个字符串,解析并且我可以提取相同的结构.

我的问题是,在java中我可以这样做:

XXX::XXX(std::string str) {

   struct yyy data;
   // do stuff with string and extract data
   this(data);
}
Run Code Online (Sandbox Code Playgroud)

使用this(params)调用另一个构造函数.在这种情况下,我可以类似的东西?

谢谢

c++

5
推荐指数
1
解决办法
3248
查看次数

基类的基本多态指针

虽然我已经在c ++工作了一段时间,但直到现在我还没有必要使用多态功能,而且我对它们非常感兴趣.

如果我有一个基类ClassA而另一个ClassB派生自它,我理解我可以拥有virtual成员函数ClassA,当实现时ClassB,ClassB即使该实例指向使用ClassA指针,也会在实例中调用它.如果没有这个virtual关键字,我假设基类实现在使用基类指针时会占上风,但是对从子类实例化的对象进行操作,如果事实上ClassB它有自己的相同函数的实现,那对我来说似乎有问题.在这种情况下被有效地忽略了.

这是对多态行为的正确理解吗?

现在真正的问题是你如何引用ClassB指针是基类.我真的只能想到两种方式:

  1. 在实例化时创建指针,使用返回基类指针的函数,同时使用子类的构造函数实际为子类分配内存.(这样的创建函数有一个共同的名称吗?)
  2. 使用static_cast并转换对象并将其指定给指向基类的指针.

这些是生成基类对象的基类指针的两种主要技术吗?

c++ polymorphism

5
推荐指数
1
解决办法
3676
查看次数

未捕获的TypeError:对象[object Object]没有方法'datepicker'

这是我在尝试使用datepicker小部件时遇到的错误:*没有方法

<script type="text/javascript" language="javascript">
    $(function () {
        $("#from").datepicker({
            ....         
            }
        });
        $("#to").datepicker({
           ....
            }
        });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的包含文件.令人困惑的部分是我在3页上使用相同的包含文件,我只在一页上得到错误.所以它真的不是剧本本身......我想

<!-- Datepicker widget -->
<script src="js/jquery-1.9.1.js" type="text/javascript"></script>
<script src="js/jquery-ui-1.10.1.custom.js" type="text/javascript"></script>
<script src="js/jquery-ui-1.10.1.custom.min.js" type="text/javascript"></script>
<link href="css/jquery-ui-1.10.1.custom.min.css" rel="stylesheet" type="text/css" />
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

javascript jquery-ui-datepicker

5
推荐指数
1
解决办法
8452
查看次数

C++中的私有基类可访问性

我最近不得不这样做:

class A { };
class B : private A { };
class C : public B {
    public:
        A *myA;
};

int main() {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在尝试的三个编译器中出错了.当我改变宣言时myA,::A *myA一切正常.我在C++标准中探讨过,发现了第11.2节第3段,它说:

注意:私有基类的成员可能无法作为继承的成员名称访问,但可以直接访问.

哪个是相关的,但不清楚.为什么名称A无法访问?如果A没有隐藏会出现什么问题?

谢谢,
-Ben

c++

5
推荐指数
1
解决办法
781
查看次数

致命错误:找不到“stdarg.h”文件

好吧,我刚刚下载了源代码,我确信它是正确的。但是当我使用 make 命令来制作文件后。出现错误:我的笔记本电脑是Mac-air

/usr/include/c++/4.2.1/cstdarg:50:10: fatal error: 'stdarg.h' file not found

有人可以帮我解决这个问题吗?

谢谢

c++ osx-mountain-lion

5
推荐指数
1
解决办法
2万
查看次数

如何从任何可调用的函数中获取有意义的函数签名

考虑这样一个野兽:

template<typename Func>
void register_function(Func func) {
  // type-erase Func and pass it on to some other function
}
Run Code Online (Sandbox Code Playgroud)

假设这可以传递给任何可调用的东西.

如果Func是普通函数类型,我知道如何获取函数的签名.鉴于它func可以是普通函数,std::function<F>函数或函数对象(std::bind()表达式),我如何得到函数的参数?

注意:

  • 在这种情况下,函数只有零个,一个或两个参数
  • 如果它是一个函数对象,那就是它的结果 std::bind()
  • 需要签名才能获得参数的类型,这些类型需要在传递的类型擦除的东西中使用

  • 这是严格的C++ 03(嵌入式平台),所以没有变量模板参数等.

c++ function template-meta-programming

5
推荐指数
1
解决办法
469
查看次数

在cmake中从十进制转换为十六进制

Y:是否可以采用带有16位十进制的变量A并将其转换为10十六进制,反之亦然,在CMake中?

Google搜索只引导我进行以下操作:

http://public.kitware.com/pipermail/cmake/2008-September/024092.html

哪个不做转换.

X:我正在尝试使用"配置文件",将配置的值作为十进制读取,并在配置的头文件中将其输出为十六进制.

cmake

5
推荐指数
1
解决办法
1363
查看次数