小编Foz*_*ozi的帖子

如何重载 - >*运算符?

我尝试了这个,以及它的一些变化:

template<class T>
class Ptr {
public:
    Ptr(T* ptr) : p(ptr) {}
    ~Ptr() { if(p) delete p; }

    template<class Method>
    Method operator ->* (Method method)
    {
        return p->*method;
    }

private:
    T *p;
};

class Foo {
public:
    void foo(int) {}
    int bar() { return 3; }
};

int main() {
    Ptr<Foo> p(new Foo());

    void (Foo::*method)(int) = &Foo::foo;
    int (Foo::*method2)() = &Foo::bar;

    (p->*method)(5);
    (p->*method2)();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用.问题是我真的不知道期待作为参数或返回什么.关于这一点的标准对我来说是不可理解的,因为谷歌没有提出任何有用的东西,我想我并不孤单.

编辑:另一个尝试,使用C++ 0x:http://ideone.com/lMlyB

c++

16
推荐指数
1
解决办法
498
查看次数

空字符串是否为零字节长度的有效base64编码数据?

我的一所大学告诉我,空字符串不是有效的base64编码数据字符串.我不认为这是真的(他太懒了解析它),但谷歌搜索后甚至检查RFC我没有找到任何明确说明如何在base64中正确编码零字节长度blob的文档.

所以,问题是:你有一些官方文档的链接,明确说明如何在base64中编码零字节?

base64

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

检查字符串是否为URL

我看过很多问题,但由于我想要一个更简单的案例,因此无法理解它是如何工作的.

如果我们有文本,无论它是什么,我想检查它是否是一个URL.

$text = "something.com"; //this is a url

if (!IsUrl($text)){
    echo "No it is not url";
    exit; // die well
}else{
    echo "Yes it is url";
    // my else codes goes
}

function IsUrl($url){
    // ???
}
Run Code Online (Sandbox Code Playgroud)

在JS被阻止的情况下,还有其他方法而不是用JavaScript检查吗?

php regex url

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

JS Promises/A +的'catch'方法名称是否无效,因为它是JS关键字?

我最近开始在一个项目中使用JS Promises.我注意到每次我使用.catch我的JS linter抱怨.它确实运行并做了它应该做的事情,但我查找了ECMAScript规范,它看起来确实是正确的:因为它catch是一个关键字,它不能用作标识符.据我所知,方法名称是标识符,所以这是无效的:

Promise.reject("Duh").catch(alert);
Run Code Online (Sandbox Code Playgroud)

它应该是这样的:

Promise.reject("Duh")['catch'](alert);
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

javascript promise ecmascript-5

8
推荐指数
1
解决办法
662
查看次数

在mac上使用gcc 4.6.1的C++ 11

我是mac的新手并试图让gcc 4.6正常工作.

我安装了MacPorts并安装了gcc 4.6.1(通过执行sudo port install gcc46).我正在尝试编译一个简单的测试代码,可以在Linux(使用gcc 4.6.1和4.6.2)和Windows上编译,但是我遇到的错误让我觉得安装的库有问题.

#include <iostream>
#include <type_traits>
#include <future>

struct test {
    void get() {}
};

/*template<typename Func>
test async(const Func &f) {
    f();
    return test();
}*/

using namespace std;

int main (int argc, const char * argv[])
{
    auto t1 = async([]() -> int{
        cout << "This is thread 1" << endl;
        return 1;
    });

    auto t2 = async([]() -> int {
        cout << "This is thread 2" << endl;
        return 2; …
Run Code Online (Sandbox Code Playgroud)

c++ macos gcc c++11

6
推荐指数
2
解决办法
6751
查看次数

无锁队列实现最终会在压力下产生循环

我有一个用C语言编写的无锁队列,它是一个链表,包含发布到单个线程并在单个线程中处理的多个线程的请求.经过几个小时的压力后,我最终得到了最后一个请求的下一个指针指向自身,这会创建一个无限循环并锁定处理线程.

应用程序在Linux和Windows上运行(并失败).我在Windows上调试,我的COMPARE_EXCHANGE_PTR地图是InterlockedCompareExchangePointer.

这是将请求推送到列表头部的代码,并从多个线程调用:

void push_request(struct request * volatile * root, struct request * request)
{
    assert(request);

    do {
        request->next = *root;
    } while(COMPARE_EXCHANGE_PTR(root, request, request->next) != request->next);
}
Run Code Online (Sandbox Code Playgroud)

这是从列表末尾获取请求的代码,仅由处理它们的单个线程调用:

struct request * pop_request(struct request * volatile * root)
{
    struct request * volatile * p;
    struct request * request;

    do {
        p = root;
        while(*p && (*p)->next) p = &(*p)->next; // <- loops here
        request = *p;
    } while(COMPARE_EXCHANGE_PTR(p, NULL, request) != request);

     assert(request->next == NULL); …
Run Code Online (Sandbox Code Playgroud)

c queue multithreading lockless

5
推荐指数
1
解决办法
1383
查看次数

编组封送接口是否为代理或原始接口提供了编组器?

这是一个具体的例子:

我通过调用创建了一个IWeBrowser2接口wb.CoCreateInstance(CLSID_InternetExplorer, 0, CLSCTX_SERVER);.这给了我一个从我的进程到任何正在运行的iexplore.exe进程的编组接口恰好包含在我的线程A中的这个浏览器选项卡.

现在我使用IGlobalInterfaceTable获取此接口的cookie,将其传递给我的线程B并从那里请求封送接口.

问题:我是在线程A中获取代理还是直接获取IE进程中的实例?

我似乎明智的是,我会通过自己的引用获得实例的直接代理,
但是:

如果我结束我的线程A,我在那里创建的cookie变得无效,我无法检索(并关闭)我创建的Web浏览器的接口指针.这没有意义,除非该线程中有一个thunk在线程退出时被销毁.

编辑:哦,两个线程都是STA.

windows com marshalling out-of-process

5
推荐指数
1
解决办法
766
查看次数

更改函数以使用向量而不是数组

我有点卡住改变功能使用矢量.我有以下函数创建一个新的动态数组.现在我需要做同样但使用向量.

int *makeData(int size)
{
    int *ptr = nullptr;
    ptr = new int[size];
    return ptr;
}
Run Code Online (Sandbox Code Playgroud)

这是我迄今为止所做的全部,似乎无法弄清楚下一步该做什么.我需要指针返回吗?

int *makeData(int size)
{
    vector<int> data(100);
}
Run Code Online (Sandbox Code Playgroud)

这个功能似乎还可以,但有一种方法可以优化它(使它更简单,更清洁).

void getMovieData2(vector<int> data, int num)
{
int temp;
cout << "Enter the number of movies each student saw.\n";

for (int count = 0; count < num; count++)
{
    cout << "Student " << (count + 1) << ": ";
    cin >> temp;
    data.push_back (temp);

    while (arr[count] <= 0)
    {
        cout << "The number of movies …
Run Code Online (Sandbox Code Playgroud)

c++ arrays vector

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