我想强制一个表的自动增量字段为某个值,我试着用这个:
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的新手:(
我有一个表product
与Id
和name
领域
我想这样做:
template <typename T>
struct S
{
...
static double something_relevant = 1.5;
};
Run Code Online (Sandbox Code Playgroud)
但我不能因为something_relevant
不是整体类型.它不依赖于T
,但现有代码依赖于它是静态成员S
.
由于S是模板,我不能将定义放在编译文件中.我该如何解决这个问题?
对于我正在使用的任何STL容器,如果我使用迭代器的默认构造函数声明一个迭代器(此特定容器类型),迭代器将初始化为什么?
例如,我有:
std::list<void*> address_list;
std::list<void*>::iterator iter;
Run Code Online (Sandbox Code Playgroud)
什么会被初始化?
我想做以下事情:
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)
似乎编译,但它是否正确?朋友和模板的语法非常不自然.
我今天跑了一个非常微妙的问题我希望得到你的意见.
考虑以下花园式共享体成语类:
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
向量内的对象,因为复制构造可能不可用.在这种情况下,这将是一个突破性的变化.
我的问题是:
std::vector
必须具有如上定义的构造函数,即.使用默认参数?特别是保证向量对象的条目被复制而不是默认构造?PS:请不要评论 …
请考虑以下代码:
void foo()
{
{
CSomeClass bar;
// Some code here...
goto label;
// and here...
}
label:
// and here...
}
Run Code Online (Sandbox Code Playgroud)
bar的析构函数会被调用吗?
有std::pair
引用是否有效?特别是,赋值运算符是否存在问题?根据这个链接,似乎没有对operator =进行特殊处理,因此无法生成默认的assignement运算符.
我希望有一个pair<T&, U&>
并且能够为其分配另一对(值或引用)并修改指向的对象.
我想知道函数式编程中的"对偶方法"可以解决什么样的现实问题.更准确地说,我想知道是否有人确实使用了我下面提到的二元方法,或者是否有其他有趣的例子.我对可能在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
.
这样做的好处是可以编写自然的代码,最后自动获得所需的精度.但是,不再可能比较实数是否相等.唯一的一种比较之间可能x
与y
是x < y + eps
.
另一个二元性的例子是关于概率测量的这个问题,它引发了我脑海中的当前问题.让我们写一下
type …
Run Code Online (Sandbox Code Playgroud) 我知道C++/CLI代码
void foo(Bar^% x);
Run Code Online (Sandbox Code Playgroud)
变成了
Void foo(ref Bar x);
Run Code Online (Sandbox Code Playgroud)
什么是C++/CLI代码
Void foo(out Bar x);
Run Code Online (Sandbox Code Playgroud)
?
考虑以下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
会选择它,因为命名空间中的生命类型.我在这里错过了什么?x
std