假设我有一个包含许多函数的模板类,我想专门化它们只更改其中的一些,并保持其他完全按照基本模板类中的指定.
我怎样才能做到这一点?
下面是我想要实现的,但解决方案并不好,因为它不允许我引用intas的特化Base<int>- 我需要使用IntSpec它.
#include <iostream>
using namespace std;
template<typename T>
struct Base
{
void print1() {cout << "Base::print1" << endl;};
void print2() {cout << "Base::print2" << endl;};
};
struct IntSpec : public Base<int>
{
void print2() {cout << "Base<int>::print2()" << endl;};
};
int main()
{
Base<double> d;
// Base<int> i; <-- I want this kind of instantiation
IntSpec i;
d.print1();
d.print2();
i.print1();
i.print2();
}
Run Code Online (Sandbox Code Playgroud)
输出是:
Base::print1
Base::print2
Base::print1
Base<int>::print2()
Run Code Online (Sandbox Code Playgroud) 我只是想知道灾难性的整数溢出是多么的真实.采用以下示例程序:
#include <iostream>
int main()
{
int a = 46341;
int b = a * a;
std::cout << "hello world\n";
}
Run Code Online (Sandbox Code Playgroud)
由于a * a32位平台上的溢出和整数溢出触发了未定义的行为,我是否有任何hello world实际出现在屏幕上的保证?
我根据以下标准引文从我的问题中删除了"已签名"部分:
(§5/ 5 C++ 03,§5/ 4 C++ 11)如果在评估表达式期间,结果未在数学上定义或未在其类型的可表示值范围内,则行为未定义.
(§3.9.1/ 4)声明的无符号整数
unsigned应遵守算术模2 ^ n的定律,其中n是该特定整数大小的值表示中的位数.这意味着无符号算术不会溢出,因为无法由结果无符号整数类型表示的结果以比模式生成的无符号整数类型所表示的最大值大1的数量为模.
我想知道这是否是一种可接受的写回调的方法:
存储回调:
struct EventHolder {
std::function<void()> Callback;
EventTypes::EventType Type;
};
std::vector<Events::EventHolder> EventCallbacks;
Run Code Online (Sandbox Code Playgroud)
方法定义:
void On(EventType OnEventType,std::function<void()>&& Callback)
{
Events::EventHolder NewEvent;
NewEvent.Callback=std::move(Callback);
NewEvent.Type=OnEventType;
EventCallbacks.push_back(std::move(NewEvent));
}
Run Code Online (Sandbox Code Playgroud)
绑定事件:
Button->On(EventType::Click,[]{
// ... callback body
});
Run Code Online (Sandbox Code Playgroud)
我最大的问题是关于通过值传递回调.这是一种有效的方法吗?
我有一个multimap,我想让它中的所有唯一键存储在一个向量中.
multimap<char,int> mymm;
multimap<char,int>::iterator it;
char c;
mymm.insert(pair<char,int>('x',50));
mymm.insert(pair<char,int>('y',100));
mymm.insert(pair<char,int>('y',150));
mymm.insert(pair<char,int>('y',200));
mymm.insert(pair<char,int>('z',250));
mymm.insert(pair<char,int>('z',300));
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?有方法可以使用键计算元素数,但不计算多图中唯一键的数量.
补充:通过唯一我指的是multimap中的所有键一次 - 它们可以在multimap中重复或出现一次.
所以这里的唯一键是-x,y和z
使用Java进行文本简化的最佳工具是什么?
以下是文本简化的示例:
John, who was the CEO of a company, played golf.
?
John played golf. John was the CEO of a company.
Run Code Online (Sandbox Code Playgroud) 有两个关于替换不可赋值的向量元素的问题:
对象不可分配的典型原因是其类定义包含const成员,因此将其operator=删除.
std::vector要求其元素类型可分配.事实上,至少使用GCC,当对象不可分配时,直接赋值(vec[i] = x;),erase()以及insert()替换元素的组合都不起作用.
可以使用像下面这样的函数来使用vector::data(),直接元素销毁和使用复制构造函数的新元素来替换元素而不会导致未定义的行为吗?
template <typename T>
inline void replace(std::vector<T> &vec, const size_t pos, const T& src)
{
T *p = vec.data() + pos;
p->~T();
new (p) T(src);
}
Run Code Online (Sandbox Code Playgroud)
下面是一个使用函数的例子.这在GCC 4.7中编译并且似乎有效.
struct A
{
const int _i;
A(const int &i):_i(i) {}
};
int main() {
std::vector<A> vec;
A c1(1);
A c2(2);
vec.push_back(c1);
std::cout << vec[0]._i << std::endl;
/* To replace the element …Run Code Online (Sandbox Code Playgroud) 这段代码有效,还是我的编译器坏了?
#include <future>
#include <iostream>
int main() {
std::cout << "doing the test" << std::endl;
std::promise<bool> mypromise;
std::future<bool> myfuture = mypromise.get_future();
mypromise.set_value(true);
bool result = myfuture.get();
std::cout << "success, result is " << result << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
$ g++-mp-4.8 -std=c++11 test.cpp
$ ./a.out
doing the test
Segmentation fault: 11
$
Run Code Online (Sandbox Code Playgroud)
我正在使用g ++ - mp-4.8,这是来自macports的gcc 4.8.
我疯了吗?
我是第一次尝试CGI脚本但没有成功.我已经阅读了很多教程,并且可能会在不同的论坛中使用线程,但我无法使其工作.我在Fedora 10机器上使用appache web服务器.我一直有问题
[Wed Oct 21 20:47:36 2009] [notice] SELinux policy enabled; httpd running as context unconfined_u:system_r:httpd_t:s0
[Wed Oct 21 20:47:36 2009] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Wed Oct 21 20:47:36 2009] [notice] Digest: generating secret for digest authentication ...
[Wed Oct 21 20:47:36 2009] [notice] Digest: done
[Wed Oct 21 20:47:36 2009] [notice] Apache/2.2.11 (Unix) DAV/2 PHP/5.2.9 mod_ssl/2.2.11 OpenSSL/0.9.8g configured -- resuming normal operations
Run Code Online (Sandbox Code Playgroud)
我需要帮助.这就是我的环境.
uname -a
Linux localhost.localdomain 2.6.27.5-117.fc10.i686 #1 SMP Tue Nov 18 12:19:59 EST 2008 …Run Code Online (Sandbox Code Playgroud) 示例(编译好)
struct A
{
void f() {};
auto g() -> decltype(f())
{}
};
Run Code Online (Sandbox Code Playgroud)
题
如果我this在decltype(ie decltype(this->f()))中添加指针,我会用gcc 4.7.0获得以下编译错误:
error: invalid use of incomplete type 'struct A'
error: forward declaration of 'struct A'
error: invalid use of incomplete type 'struct A'
error: forward declaration of 'struct A'
Run Code Online (Sandbox Code Playgroud)
是否this允许在decltype中使用?有人能帮我理解是什么问题吗?
编辑