小编Ale*_* C.的帖子

在postgres中重置自动增量计数器

我想强制一个表的自动增量字段为某个值,我试着用这个:

ALTER TABLE product AUTO_INCREMENT = 1453
Run Code Online (Sandbox Code Playgroud)

ALTER SEQUENCE product  RESTART WITH 1453;
ERROR:  relation "your_sequence_name" does not exist
Run Code Online (Sandbox Code Playgroud)

我是postgres的新手:(

我有一个表productIdname领域

sql postgresql reset auto-increment

195
推荐指数
13
解决办法
16万
查看次数

类模板中的静态成员初始化

我想这样做:

template <typename T>
struct S
{
    ...
    static double something_relevant = 1.5;
};
Run Code Online (Sandbox Code Playgroud)

但我不能因为something_relevant不是整体类型.它不依赖于T,但现有代码依赖于它是静态成员S.

由于S是模板,我不能将定义放在编译文件中.我该如何解决这个问题?

c++ static templates

138
推荐指数
3
解决办法
8万
查看次数

什么是迭代器的默认值?

对于我正在使用的任何STL容器,如果我使用迭代器的默认构造函数声明一个迭代器(此特定容器类型),迭代器将初始化为什么?

例如,我有:

std::list<void*> address_list;
std::list<void*>::iterator iter;
Run Code Online (Sandbox Code Playgroud)

什么会被初始化?

c++ containers iterator stl default

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

如何将模板化的struct/class声明为朋友?

我想做以下事情:

template <typename T>
struct foo
{
    template <typename S>
    friend struct foo<S>;

private:
    // ...
};
Run Code Online (Sandbox Code Playgroud)

但我的编译器(VC8)扼杀了它:

error C3857: 'foo<T>': multiple template parameter lists are not allowed
Run Code Online (Sandbox Code Playgroud)

我想有所有可能的实例template struct foo朋友foo<T>所有T.

我该如何工作?

编辑:这个

template <typename T>
struct foo
{
    template <typename>
    friend struct foo;

private:
    // ...
};
Run Code Online (Sandbox Code Playgroud)

似乎编译,但它是否正确?朋友和模板的语法非常不自然.

c++ templates friend

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

std :: vector,默认构造,C++ 11和重大变化

我今天跑了一个非常微妙的问题我希望得到你的意见.

考虑以下花园式共享体成语类:

struct S
{
    S() : p_impl(new impl) {}
private:
    struct impl;
    boost::shared_ptr<impl> p_impl;
};
Run Code Online (Sandbox Code Playgroud)

当您尝试以下列方式将它们放入向量时,会出现这种乐趣:

std::vector<S> v(42);
Run Code Online (Sandbox Code Playgroud)

现在,至少使用MSVC 8,所有元素v共享同一个impl成员.实际上,导致这种情况的原因是vector构造函数:

template <typename T, typename A = ...>
class vector
{
    vector(size_t n, const T& x = T(), const A& a = A());
    ...
};
Run Code Online (Sandbox Code Playgroud)

在这些场景中,只有一个S对象被默认构造,从中复制了它们的n元素vector.

现在,使用C++ 11,有rvalue引用.所以它不能像这样工作.如果a vector被构造为

std::vector<S> v(42);
Run Code Online (Sandbox Code Playgroud)

然后很可能,实现将选择默认构造n向量内的对象,因为复制构造可能不可用.在这种情况下,这将是一个突破性的变化.

我的问题是:

  1. C++ 03标准是否std::vector必须具有如上定义的构造函数,即.使用默认参数?特别是保证向量对象的条目被复制而不是默认构造?
  2. C++ 11标准对同一点有什么看法?
  3. 我认为这可能会导致C++ 03和C + 11之间发生重大变化.这个问题是否已被调查过?解决了 ?

PS:请不要评论 …

c++ stl vector backwards-compatibility c++11

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

转出一个块:析构函数被调用?

请考虑以下代码:

void foo()
{
    {
        CSomeClass bar;

        // Some code here...

        goto label;

        // and here...
    }

label:
    // and here...
}
Run Code Online (Sandbox Code Playgroud)

bar的析构函数会被调用吗?

c++ destructor goto

43
推荐指数
4
解决办法
6296
查看次数

std ::引用对

std::pair引用是否有效?特别是,赋值运算符是否存在问题?根据这个链接,似乎没有对operator =进行特殊处理,因此无法生成默认的assignement运算符.

我希望有一个pair<T&, U&>并且能够为其分配另一对(值或引用)并修改指向的对象.

c++ std

32
推荐指数
4
解决办法
2万
查看次数

函数式编程中的对偶性方法

我想知道函数式编程中的"对偶方法"可以解决什么样的现实问题.更准确地说,我想知道是否有人确实使用了我下面提到的二元方法,或者是否有其他有趣的例子.我对可能在Haskell 中的现有实现特别感兴趣.

[由于大多数对这个问题感兴趣的人可能都知道Haskell,请允许我添加Haskell标签,即使这个问题与语言无关]

让我通过几个例子来解释我所说的二元性(缺乏一个更好的名字).第一个是实数.假设存在a Integer和a Rational类型,并将实数定义为函数(原谅我的Haskell,我不是硬核的haskeller)

type Real = Integer -> Rational
Run Code Online (Sandbox Code Playgroud)

这样,无论何时x :: Real表示实数x,都x n产生一个在2^(-n)x 内的有理数.

现在可以做到

(+) :: Real -> Real -> Real
(+) x y n = (x $ n + 1) + (y $ n + 1)
Run Code Online (Sandbox Code Playgroud)

或类似地用于其他算术运算.给定一个连续的实函数f,还可以计算f x只要一个可以计算连续模f.

这样做的好处是可以编写自然的代码,最后自动获得所需的精度.但是,不再可能比较实数是否相等.唯一的一种比较之间可能xyx < y + eps.

另一个二元性的例子是关于概率测量的这个问题,它引发了我脑海中的当前问题.让我们写一下

type …
Run Code Online (Sandbox Code Playgroud)

math haskell functional-programming

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

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

为什么Argument Dependent Lookup不能与函数模板dynamic_pointer_cast一起使用

考虑以下C++程序:

#include <memory>

struct A {};

struct B : A {};

int main()
{
    auto x = std::make_shared<A>();
    if (auto p = dynamic_pointer_cast<B>(x));
}
Run Code Online (Sandbox Code Playgroud)

使用MSVC 2010进行编译时,我收到以下错误:

error C2065: 'dynamic_pointer_cast' : undeclared identifier
Run Code Online (Sandbox Code Playgroud)

如果auto被替换,则错误仍然存​​在std::shared_ptr<A>.当我完全符合要求时std::dynamic_pointer_cast,程序会成功编译.

另外,gcc 4.5.1也不喜欢它:

error: 'dynamic_pointer_cast' was not declared in this scope
Run Code Online (Sandbox Code Playgroud)

我认为Koenig查找std::dynamic_pointer_cast会选择它,因为命名空间中的生命类型.我在这里错过了什么?xstd

c++ argument-dependent-lookup

26
推荐指数
2
解决办法
1931
查看次数