我正在寻找一种优雅的解决方案,用于在C++中实现C#using语句的等价物.理想情况下,结果语法应该易于使用和阅读.
C#使用语句详细信息在这里 - http://msdn.microsoft.com/en-us/library/yh598w02(v=vs.80).aspx
我不确定解决方案是使用函数指针与类上的析构函数,某种形式的巧妙模板编程甚至是元模板编程.基本上我不知道从哪里开始......
我的问题的简短版本是:我如何使用std::bind()标准库算法之类的东西?
由于短版本有点缺乏细节,这里有一点解释:假设我有算法std::transform(),现在我想实现std::copy()(是的,我意识到std::copy()标准C++库中有).由于我很懒惰,我显然想要使用现有的实现std::transform().当然,我可以这样做:
struct identity {
template <typename T>
auto operator()(T&& value) const -> T&& { return std::forward<T>(value); }
};
template <typename InIt, typename OutIt>
auto copy(InIt begin, InIt end, OutIt to) -> OutIt {
return std::transform(begin, end, to, identity());
}
Run Code Online (Sandbox Code Playgroud)
不知何故,这种实现有点像一种算法的配置.例如,似乎std::bind()应该能够完成这项工作,但只是使用std::bind()不起作用:
namespace P = std::placeholders;
auto copy = std::bind(std::transform, P::_1, P::_2, P::_3, identity());
Run Code Online (Sandbox Code Playgroud)
问题是编译器无法仅从算法中确定适当的模板参数,如果存在&或不存在则无关紧要.有没有什么可以像使用std::bind()工作一样的方法?由于这是期待,我很满意一个解决方案,它已经提出了包含在C++标准中的任何内容.另外,为了摆脱我的懒惰,我很乐意在前面做一些工作,以便以后更容易使用.以这种方式思考:在我作为库实现者的角色中,我会把事情放在一起,这样每个库用户都可以变得懒惰:我是一个忙碌的实现者,但是一个懒惰的用户.
如果您想要一个现成的试验台:这是一个完整的程序.
#include …Run Code Online (Sandbox Code Playgroud) 这一直困扰着我多年.
回到过去,当我们搜索自己的食物并使用DataSet时,您可以通过从顶部的下拉列表中选择所需内容来捕捉DataSet中的特定表.
如果我有一个很大的'Linq2Sql DBML文件,里面有很多表,那么导航就变成了一场噩梦.有没有办法跳转到特定的表?
我正在使用以下编译器:
Microsoft Visual C++ 2010
以下代码在编译时崩溃:
template<class T_>
void crasher(T_ a, decltype(*a)* dummy = 0){}
int main()
{
crasher(0);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
decltype(*a)*用于实施T_是一个指针样型-如char*,int*,和shared_ptr<int>.
为什么会崩溃?这是一个已知的错误?
这个问题更多的是做某事的正确方法......
问题是......在一个using块和一个块之间是否存在正确的嵌套顺序try/catch?
是否可以将整个using语句嵌套在a中try/catch并保持using块的好处?(或者异常会导致using语句的结束部分被抛出窗口)
或者,您是否应该try/catch在using语句内部嵌套,并且只包含进行数据库访问的语句?
是...
try {
using( tsmtcowebEntities db = new tsmtcowebEntities() ) {
violationList = ( from a in db.DriverTrafficViolationDetails
where a.DriverTrafficViolation.DriverApplicationId == DriverAppId
orderby a.DateOfOccurance descending
select a ).ToList<DriverTrafficViolationDetail>();
GeneralViolation = ( from a in db.DriverTrafficViolations
where a.DriverApplicationId == DriverAppId
select a ).FirstOrDefault();
}
} catch { }
Run Code Online (Sandbox Code Playgroud)
少于/多于......
using( tsmtcowebEntities db = new tsmtcowebEntities() ) {
try {
violationList = ( from …Run Code Online (Sandbox Code Playgroud) 这表现得很好:
double t = r[1][0] * .5;
Run Code Online (Sandbox Code Playgroud)
但这不是:
double t = ((1/2)*r[1][0]);
Run Code Online (Sandbox Code Playgroud)
r 是一个二维矢量.
只是想到了一种可能性.是因为(1/2)被认为是int和(1/2) == 0?
除了极少数例外(看着你,华氏温度和摄氏温度标度),单位是线性的,零值同时是所有单位的附加标识.
所以给定
auto speed = dimensioned(20, _meter/_second);
auto power = dimensioned(75, _watt);
Run Code Online (Sandbox Code Playgroud)
然后
if (speed < 6) ...
if (power > 17) ...
Run Code Online (Sandbox Code Playgroud)
没有比这更有意义了
if (speed > power) ...
Run Code Online (Sandbox Code Playgroud)
你应该写
if (speed < dimensioned(6, _mile/_hour)) ...
Run Code Online (Sandbox Code Playgroud)
但是,这有意义:
if (speed < 0)
Run Code Online (Sandbox Code Playgroud)
因为0 m/s == 0 mph == 0 AU /两周或你想要使用的任何其他单位(速度).那么问题是如何启用此功能并仅启用此用法.
C++ 11显式运算符和上下文转换bool摆脱了"安全布尔"成语的需要.看来这个问题可以通过类似的"安全零"成语来解决:
struct X
{
int a;
friend bool operator<(const X& left, const X& right) { return left.a < right.a; }
private:
struct safe_zero_idiom;
public:
friend bool operator<(const …Run Code Online (Sandbox Code Playgroud) fncs:operator new和operator new [](不是new和new []运算符)之间有什么区别吗?当然除了调用语法?我问,因为我可以使用:: operator new(sizeof(T)*numberOfObject)为我的objs分配X个字节,然后使用数组表示法访问它们,那么:: operator new []有什么大不了的.它只是语法糖吗?
#include <new>
#include <iostream>
#include <malloc.h>
using namespace std;
struct X
{
int data_;
X(int v):data_(v){}
};
int _tmain(int argc, _TCHAR* argv[])
{
unsigned no = 10;
void* vp = ::operator new(sizeof(X) * no);
cout << "Mem reserved: " << _msize(vp) << '\n';
X* xp = static_cast<X*>(vp);
for (unsigned i = 0; i < no; ++i)
{
new (xp + i) X(i);
}
for (unsigned i = 0; i < …Run Code Online (Sandbox Code Playgroud) 考虑到VIPER结构

我有两个模块,A和B.第一个模块A,通过演示者,想要执行必须在模块B中完成的动作,因此告诉它的线框执行它.问题是,谁负责实例化整个模块(视图,交互者,演示者......).我看到了一些不同方法的例子:
考虑到线框负责路由,它是否还负责创建其模块?