小编Ale*_* C.的帖子

typeof的返回类型是什么?

我想提供一个元素类型作为参数,以初始化指向未知类型元素的指针数组

就像是

void* init(type t)
  void* array = malloc(sizeof_type(t)*10));
  return array;
}
Run Code Online (Sandbox Code Playgroud)

然后打电话给

   init(typeof(int))
Run Code Online (Sandbox Code Playgroud)

但是我无法弄清楚typeof的返回类型是什么。

我猜想sizeof_type可以使用

   malloc((type) 0);
Run Code Online (Sandbox Code Playgroud)

提前致谢

PS:这对于矢量实现来说,如果有人可以指出我一些弹性代码,我也将非常感谢

c gcc typeof

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

Pimpl与类模板构造函数中的智能指针:奇怪的不完整类型问题

当使用带有pImpl惯用语的智能指针时,如

struct Foo
{
private:
    struct Impl; 
    boost::scoped_ptr<Impl> pImpl;
};
Run Code Online (Sandbox Code Playgroud)

显而易见的问题是Foo::ImplFoo生成析构函数时不完整.

编译器通常在那里发出警告,并且boost::checked_delete由Boost智能指针在内部使用,静态断言该类Foo::Impl是完整的,如果不是这样则触发错误.

对于上面的编译示例,因此必须编写

struct Foo
{
    ~Foo();

private:
    struct Impl; 
    boost::scoped_ptr<Impl> pImpl;
};
Run Code Online (Sandbox Code Playgroud)

Foo::~Foo在实现文件中实现一个空,Foo::Impl完成的地方.这是智能指针优于裸指针的优势,因为我们不能无法实现析构函数.

到现在为止还挺好.但是当我尝试在类似的Bar类中引入模板构造函数时,我遇到了一种奇怪的行为(完整代码,请亲自尝试):

// File Bar.h
#ifndef BAR_H
#define BAR_H 1

#include <vector>
#include <boost/scoped_ptr.hpp>

struct Bar
{
    template <typename I>
    Bar(I begin, I end);

    ~Bar();

private:
    struct Impl;
    boost::scoped_ptr<Impl> pImpl;

    void buildImpl(std::vector<double>&);
};


template <typename I>
Bar::Bar(I begin, I end)
{
    std::vector<double> tmp(begin, …
Run Code Online (Sandbox Code Playgroud)

c++ pimpl-idiom smart-pointers incomplete-type

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

无法从(MonadRandom r)推断出(Functor r)

简单的下面的代码

import Control.Monad
import Control.Monad.Random

psum :: (MonadRandom r) => Int -> r Double -> r Double
psum n x = fmap sum $ replicateM n x
Run Code Online (Sandbox Code Playgroud)

产生错误:

Could not deduce (Functor r) arising from a use of `fmap'
    from the context (MonadRandom r)
Run Code Online (Sandbox Code Playgroud)

这对我来说很奇怪

class (Monad m) => MonadRandom m where ...
Run Code Online (Sandbox Code Playgroud)

Control.Monad.Random.Class源文件中,由于monad是仿函数,GHC应该推断出r在我的上下文中是一个仿函数.我也尝试导入但Control.Monad.Random.Class没有成功.

手动添加Functor约束r作品,但我觉得这很难看.

我在这里错过了什么?

haskell

4
推荐指数
1
解决办法
402
查看次数

CRTP和完美的转发

考虑CRTP的标准用法,对于某些表达式模板机制,它通过值保持其子节点:

template <typename T, typename>
struct Expr {};

template <typename T>
struct Cst : Expr<T, Cst<T>> 
{
    Cst(T value) : value(std::move(value)) {}

private:
    T value;
};

template <typename T, typename L, typename R>
struct Add : Expr<T, Add<T, L, R>> 
{
    Add(L l, R r) : l(std::move(l)), r(std::move(r))

private:
    L l; R r;
};
Run Code Online (Sandbox Code Playgroud)

等等

现在,在实现运算符时,我们必须通过引用传递,因为参数将被向下转换为正确的类型.问题是我发现自己实现了四个(!)版本operator+:

template <typename T, typename L, typename R>
Add<T, L, R> operator+(Expr<T, L>&& l, Expr<T, R>&& r)
{
    return …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

4
推荐指数
1
解决办法
482
查看次数

为什么我们将INT_MIN定义为-INT_MAX - 1?

AFAIK这是一个标准的"习语"

#  define INT_MIN   (-INT_MAX - 1)  
#  define INT_MAX   2147483647    
Run Code Online (Sandbox Code Playgroud)

问题:为什么INT_MIN的定义不是-2147483648?

c signed types integer

4
推荐指数
1
解决办法
2122
查看次数

我可以抛出`std :: bad_cast`吗?

是否可以抛出一个实例std::bad_cast?根本的问题不是这样做是好还是不好,只是关于是否std::bad_cast有默认构造函数.

谢谢

c++

3
推荐指数
1
解决办法
1397
查看次数

Haskell的有限差异,或如何禁用潜在的优化

我想实现以下天真(一阶)有限差分函数:

finite_difference :: Fractional a => a -> (a -> a) -> a -> a
finite_difference h f x = ((f $ x + h) - (f x)) / h
Run Code Online (Sandbox Code Playgroud)

正如您可能知道的那样,存在一个微妙的问题:必须确保(x + h)并且可以x用完全可表示的数字来区分.否则,结果有一个巨大的错误,由于(f $ x + h) - (f x)涉及灾难性取消的事实(并且必须仔细选择h,但这不是我的问题).

在C或C++中,问题可以像这样解决:

volatile double temp = x + h;
h = temp - x;
Run Code Online (Sandbox Code Playgroud)

并且volatile修饰符禁用与变量有关的任何优化temp,因此我们确信"聪明"的编译器不会优化这两行.

我还不知道Haskell还不知道如何解决这个问题.恐怕

let temp = x + h
    hh = temp - x 
in ((f …
Run Code Online (Sandbox Code Playgroud)

optimization haskell rounding-error numerical-methods

3
推荐指数
1
解决办法
514
查看次数

如何从 ssh 会话内部获取伪终端主文件描述符?

在 C 或 bash 中,

我想知道如果可能的话,如何从 ssh 会话内部获取伪终端主机的文件描述符,该伪终端主机负责将输入输入到该会话的从站(pts)。

c pts pty

3
推荐指数
1
解决办法
1492
查看次数

Alphablend功能

是否可以使用alphablend函数使图像的某些部分透明?

我可以创建一个包含RGB(0,0,255)特定区域的图像,当我绘制该图像时,该区域应该是透明的.这可能是AlphaBlend函数.是的,那么如何?

我正在阅读有关alphablend的内容,但我仍然不清楚.我想我们需要在创建图像时指定alphachannel.如果某个像素不存在alphachannel,那么该像素不能透明?

c++ winapi gdi alphablending

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

为什么带有对指针引用的输入的函数不能编译?

我在我的Linux机箱上测试了这个,它有gcc,编译得很好.

void myFunc(int* &input);
Run Code Online (Sandbox Code Playgroud)

编译没有错误.

在我的avr上,声明相同的功能:

void myFunc(int* &input);
Run Code Online (Sandbox Code Playgroud)

导致编译错误:

expected ';', ',' or ')' before '&' token
Run Code Online (Sandbox Code Playgroud)

linux上的gcc版本是4.6.3

avr(avr-gcc)的gcc版本是3.4.2

c c++ avr

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

C编程问题 - 分支

编写一个程序,将输入读取到#并报告序列ei发生的次数.

我有一个序列有点慌乱,如'ieei'其中编译器会进入第3 'e',但从来没有取'i'getchar(),为什么,如果有人能够自己之前改善这一点,会是好?

char ch;
int sq=0;

while ((ch = getchar()) != '#')
{
    if (ch == 'e')
    {
        ch = getchar();

        if (ch == 'e')
            ch = getchar();

        if (ch == 'i')
            sq++;
    }
}

printf("Sequence occurs %d %s\n", sq, sq == 1 ? "time" : "times");
Run Code Online (Sandbox Code Playgroud)

c

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