这么多关于lambda函数的讨论......所以我试着写我的.:(.它不起作用.g ++ 4.3.2是否支持lambda函数?如何确定它是否支持某个c ++ 0x功能?
可能重复:
返回类型的函数重载?
拼图:根据返回值重载C++函数
因为我有一个库,它以下列形式公开了一堆函数:
bool GetVal();
double GetVal();
int GetVal();
long GetVal();
//So on.
Run Code Online (Sandbox Code Playgroud)
现在我必须包装这些.我宁愿不再重写同一组函数.我想做点什么
template<class T>
T GetVal(){}
Run Code Online (Sandbox Code Playgroud)
但我似乎无法让这个工作.有任何想法吗?
我的一位朋友向我提出了这个问题.我被困住了因为我不善于使用异常.请记住,我们都在使用C++的工作环境中工作,但在C传统中进行错误处理.他的问题是这样的:
函数A调用B依次调用C.抛出异常C并且该异常的catch块在A.B调用之前获得的资源会发生什么C?我们如何清理它们?我的回答是使用RAII.但即使我说出来,我也知道它不会起作用.我们有很多以C模式编写的代码库.在代码中我没有看到自动指针等.资源不一定包含在类中.即使它们是,在大多数情况下,析构函数仍留给编译器.简而言之,一切都是手动完成的.
真正的问题是如何通过巨大的代码库来实现从C错误处理到异常的转换?我的朋友提出的问题只是当你在C语言错误处理方面站稳脚跟并想知道如何从那里迁移到异常时可能出现的问题之一.
我可能会问一个愚蠢的问题,但我在这里查看了RVO的维基百科页面,并且无法停止想知道这种行为是否错误.我在我的机器上尝试了它,尽管优化水平,RVO仍然完全被踢了.如果确实有一些大的构造happenning?我知道它不应该,但如果呢?我无法理解为什么在构造函数中存在副作用时仍会发生RVO.
编辑:-fno-elide-constructors似乎停止RVO.但问题仍然存在.
编辑2:更严重的是,有多少人知道这样的事情?它可能在标准中,但它仍然是一个非常难看的功能,因为我看到它.至少编译器应该默认禁用它,并为知道这一点的人提供一个开关.:)
编辑3:我仍然坚持认为这真的很糟糕.:).我不认为我知道任何其他语言约束直接违背语言的语法.其他一切都会引发编译器或链接器错误吗?
我有两个关于运算符重载的问题.
对于迭代器类型,如何operator->重载?假设它是class T对象集合的迭代器,它应该返回什么值?
为什么operator++()返回class T&时operator++(int)返回class T?我理解这两个代表前缀增量和后缀增量.但为什么回报价值的差异呢?
编辑:对于阿尔夫.虽然功能正常但代码并不完整.欢迎任何改进建议.
#ifndef DHASH_H
#define DHASH_H
//#include <vector>
#include <memory>
#include <exception>
#include <new>
#include <algorithm>
#include <functional>
namespace MCol
{
template <typename KEY, typename VALUE, typename HASH_FUNCTION, typename KEY_COMP = std::equal_to<KEY> >
class hash_container
{
private:
struct entry
{
KEY _k;
VALUE _v;
entry(const KEY& k, const VALUE& v)
:_k(k), _v(v)
{}
entry& operator=(const entry& e)
{
this->_k = e._k;
this->_v = …Run Code Online (Sandbox Code Playgroud) 如何让g ++对typedef进行类型检查?可能吗?即
typedef int T1;
typedef int T2;
T1 x = 5; //Ok with me
T2 y = x; //Any way to get an error or a warning here?
Run Code Online (Sandbox Code Playgroud)
我不能使用C++ 0x功能(我不知道他们是否可以这样做.)
编辑:我想要的是这样的:
typedef int BallID;
typedef int BatID;
BatID x = 10;
map<BatID, Bat*> m;
m.insert(make_pair(x, bigbat)); //OK
BallID y = 15;
m.insert(make_pair(y, smallbat)); //Give me a warning at least plz
Run Code Online (Sandbox Code Playgroud)
这要问太多了吗?
我使用WPF开发了两个中等大小的应用程序.WPF的清晰度及其功能给我留下了深刻的印象.当我向我的一位同事(谁正在开发商业应用程序)解释WPF的各种好处时,他向我提出了这个让我完全难过的问题的挑战:
问题:
他在大约2分钟内用以下方式编写了一个应用程序:
Loan.Loan.Loan数据源的视图类型更改为"详细信息".Loan[]包含一个对象的数据源.代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WinForms_DataBinding_Example
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
loanBindingSource.DataSource = new Loan[] { new Loan() };
}
}
public class Loan
{
public decimal Amount { get; set; }
public …Run Code Online (Sandbox Code Playgroud) 我理解为什么这会导致段错误:
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector<int> v;
int iArr[5] = {1, 2, 3, 4, 5};
int *p = iArr;
copy(p, p+5, v.begin());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但为什么这不会导致段错?
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector<int> v;
int iArr[5] = {1, 2, 3, 4, 5};
int *p = iArr;
v.reserve(1);
copy(p, p+5, v.begin());
return 0;
}
Run Code Online (Sandbox Code Playgroud) ...../PluginLoader.h:34: multiple definition of 'Dummy_Func_For_Generating_FUNCTION_NAME_Macro()'
以下代码输出上述错误.我在我的档案中加入了警卫.其他一切都很好.
编辑:我想要实现的是检查是否__PRETTY_FUNCTION__已定义,如果是,请稍后在FUNCTION_NAME宏代码中使用它(用于记录目的).如果__PRETTY_FUNCTION__没有定义,请使用下一个最好的东西,依此类推.然而,我得到的回应让我意识到这是不可能的.那么,如果__PRETTY_FUNCTION__和所有这些不是宏,那么它们是什么?我如何检查某个实现是否有其中一个?
void Dummy_Func_For_Generating_FUNCTION_NAME_Macro()
{
#ifndef FUNCTION_NAME
#ifdef __PRETTY_FUNCTION__
#define FUNCTION_NAME __PRETTY_FUNCTION__
#elif __FUNCTION__
#define FUNCTION_NAME __FUNCTION__
#elif __func__
#define FUNCTION_NAME __func__
#else
#define FUNCTION_NAME ""
#endif
#endif
}
Run Code Online (Sandbox Code Playgroud) 如何确定列是否是oracle中的自动增量字段?