小编Aus*_*yde的帖子

使用二进制标志来表示状态,选项等

如果我想表示使用二进制的"标志",这样我可以通过他们,并将它们存储到像一个对象状态或期权或类似的东西OPTION1 | OPTION2在那里OPTION1是0001 OPTION2是0010,这样,所获取传递为0011,较选项的组合.

我将如何在C++中执行此操作?我在想类似的东西

enum Option {
    Option_1 = 0x01,
    Option_2 = 0x02,
    Option_3 = 0x04,
    //...
}

void doSomething(Option options) {
    //...
}

int main() {
    doSomething(Option_1|Option_2);
}
Run Code Online (Sandbox Code Playgroud)

但理想情况下,doSomething知道如何解释给定的选项.

我是在正确的轨道上吗?有没有更好的办法?

更新

我不是必须Option为每种可能的组合定义一个吗?

c++ binary flags

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

PHP中的MVC没有"魔力"

假设我有一个PHP模型 - 视图 - 控制器框架,它将地址映射http://example.com/admin/posts/edit/5到一个看起来像的动作

Posts_Controller::editAction($id)
Run Code Online (Sandbox Code Playgroud)

在文件中 /admin/controllers/posts.php

现在,我所看到的许多现有PHP框架都可以通过类似的方式实现

$module = Router::getModule(); // "admin"
$controller = Router::getController(); // "posts"
$action = Router::getAction(); // "edit"
$params = Router::getParams(); // array(5)

$controller_file = "/".$module."/controllers/".$controller.".php";
$controller_classname = ucfirst($controller)."_Controller";
$method = $action."Action";

require_once $controller_file;
$controller_obj = new $controller_classname();
call_user_func_array(array($controller_obj,$method),$params);
Run Code Online (Sandbox Code Playgroud)

对我来说,这闻起来很糟糕,看起来太"神奇"了:我不相信你应该能够根据字符串动态创建类,然后调用指定为字符串的方法.

我也看到了使用反射来调用动作的替代方法,这些方法也有些不好.

现在想象一下,我有一个更大的模块化CMS,它建立在类似的MVC框架之上,每个"页面"类型都有一个数据库表:博客,静态,相册等...我想这个实现是类似于我之前的例子.

我是唯一一个认为这是坏事的人吗?如果没有,是否应该有一种能够涵盖这种情况的设计模式?

澄清:

是否有一些方法可以将包含有关模块,控制器,操作和参数的信息的查询映射到

  1. 要包含的文件
  2. 要实例化的类
  3. 一种叫''的方法'

那使用尽可能少的 "魔法"(字符串到类或反射方法或反射)?

更好的是:如果没有反射,如何在C#或Java中完成?我可以允许连接字符串到达​​文件位置.

php model-view-controller design-patterns

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

CodeIgniter 1.7.2无效的上传目录

我正在尝试使用CodeIgniter 1.7.2创建一个图像上传表单

但是,当我尝试上传图像时,CI通知我上传目录无效.

为了检查这一点,我将一个文件上传到uploads目录中test.txt,Hello, World!然后用内容调用它,然后回显它的内容,然后,它说,你好.除此之外,我可以浏览目录并在我的浏览器中查看它的内容,因此目录肯定存在且可见.

控制器:

class Pictures extends Site_Controller {
    // snip...
    public function upload() {
        $this->load->helper('form');
        $this->_render('Do Upload','pictures/upload',array('msg'=>''));
    }
    public function do_upload() {
        $this->load->helper('form');

        $config['upload_path'] = base_url().'uploads/';
        // test the directory:
        // echo file_get_contents($config['upload_path'].'test.txt');
        // should echo "Hello, World!"
        $config['allowed_types'] = 'gif|jpg|png';
        $config['max_size']    = '2048';
        $config['max_width']  = '1024';
        $config['max_height']  = '768';

        $this->load->library('upload', $config);

        if ( ! $this->upload->do_upload())
        {
            $data = array('msg' => $this->upload->display_errors());

            $this->_render('Do Upload (Errors!)','pictures/upload',$data);
        }    
        else
        {
            $uploaddata = $this->upload->data(); …
Run Code Online (Sandbox Code Playgroud)

php codeigniter file-upload

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

如何在PHP中创建一个漂亮的"日期选择器"?

我正在做一些MySQL和PHP的实验,我很想创建一个漂亮的"日期选择器",例如选择日期2010-11-11(今天的日期).

我想在我的MySQL数据库中存储有效的DATETIME值,并且我想要一个PHP页面来提供,日的滚动列表(例如2010-11-11),以避免强制用户在日期中手动编写日期.形式然后做检查.

我的问题是,让我们说用户选择日期2010-11-31(不存在); 如何创建简单的滚动列表以便动态调整?也就是说,用户FIRST选择年份,然后是月份,最后是当天(动态改变以适应给定月份中的实际天数).希望闰年也将得到照顾.在全部选择并且用户按下提交后,脚本将向数据库提交格式正确的DATETIME值(例如YYYY-MM-DD或YYYYMMDD).

据我所知,DATETIME类型是严格的标准,这意味着服务器将跟踪无效日期,这应该足够容易进行错误检查.但我想通过做上面描述的事情来避免这种情况.

你会说我只用PHP(和MySQL)很容易实现我描述的'解决方案'吗?或者我需要一些其他东西(例如AJAX/JavaScript,JQuery等)来管理它?任何建议和指示都是非常受欢迎的,尤其是可能更容易实现的同一问题的替代方法.提前致谢!

javascript php datetime datepicker

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

在Mac上设置Actionscript 3编译

我想在我的MacBook上进行一些Flash开发,利用Flex 3 SDK将Actionscript 3编译成SWF电影.

我如何设置我的Mac来做到这一点?

我还想了解flash编译器如何将包名称解释为目录结构.

我在高中时参加过Flash课程,但它非常依赖Adobe Flash IDE的使用,并且非常注重图形开发,而不是编程和OOP.

我想,例如,有一个Application类,它将作为舞台,以及多个其他AS3类作为其他MovieClip,Sprite等.当我构建/编译时,项目目录中的所有类都应该构建到单个.swf文件.

这种情况是否现实?可实现的?如果是这样,我该如何到达那里?

谢谢!

flash actionscript-3

0
推荐指数
1
解决办法
3175
查看次数

在Qt应用程序中似乎无法识别插槽

我最近一直在努力学习C++和Qt4,但我遇到了绊脚石.

我有以下类和实现:

class Window : public QWidget
{
public:
    Window();

public slots:
    void run();

private:
    //...
};
Run Code Online (Sandbox Code Playgroud)

Window::Window()
{
    //...

    connect(runBtn,SIGNAL(clicked()),this,SLOT(run()));

    //...
}
Window::run()
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试构建并运行它时,尽管它构建得很好,它会立即退出并显示消息

Object::connect: No such slot QWidget::run()
Run Code Online (Sandbox Code Playgroud)

除非我做错了什么,否则Qt似乎没有认识到这个问题 run()

有人可以帮忙吗?


更新:

代码现在是:

class Window : public QWidget
{
    Q_OBJECT
public:
    Window(QWidget *parent = 0);

public slots:
    void run();

private:
    //...
};
Run Code Online (Sandbox Code Playgroud)

Window::Window(QWidget *parent) : QWidget(parent)
{
    //...

    connect(runBtn,SIGNAL(clicked()),this,SLOT(run()));

    //...
}
Window::run()
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

该程序仍"意外完成",但不再告诉我没有这样的事情 QWidget::run()

c++ qt qt4 signals-slots

0
推荐指数
1
解决办法
2759
查看次数

更好的计算方法?

在我的一个学校课程中,我使用以下函数来计算字符串中标识符的频率,用换行符和#分隔:

输入:

dog
cat
mouse
#
rabbit
snake
#
Run Code Online (Sandbox Code Playgroud)

功能:

//assume I have the proper includes, and am using namespace std
vector< pair<string,int> > getFreqcounts(string input) {
    vector<string> items = splitString(input,"\n");
    map<string,int> counts;

    for (int i=0; i<items.size(); i++) {
        if (items[i] == "#") continue;
        counts[items[i]] = 0;
    }
    for (int i=0; i<items.size(); i++) {
        if (items[i] == "#") continue;
        counts[items[i]]++;
    }

    return vector< pair<string,int> > (counts.begin(),counts.end());
}
Run Code Online (Sandbox Code Playgroud)

我想至少

  • 删除double for循环
  • 找到一个更好的方法来获得一个 vector< pair<string,int> >

有任何想法吗?

顺便说一句,这不是功课.真正的家庭作业将使用这个功能,但这完全出于我自己的好奇心和渴望拥有"更好"的代码.

c++ stl

0
推荐指数
1
解决办法
264
查看次数

对简单Windows窗体的建议

我有一个非常简单的窗体,用户用来管理"商店".

每个商店都有一个名称和编号,并保存在相应的数据库表中.

表单有一个商店列表框,一个创建新商店的添加按钮,一个删除按钮和一个编辑按钮.

除了那些我有文字框的名称和数字,以及保存/取消按钮.

当用户从列表框中选择商店并单击"编辑"时,文本框将变为填充状态,保存/取消将变为活动状态.当用户点击"添加"时,我创建一个新的商店,将其添加到列表框,激活文本框和保存/取消按钮,然后在用户点击"保存"时将其提交到数据库,或者在用户点击时将其丢弃'取消'.

现在,我的事件系统看起来像这样(在psuedo-code中.它只是那么短.)

add->click:
    store = new Store()
    listbox.add(store)
    populateAndEdit(store)

delete->click:
    store = listbox.selectedItem
    db.deleteOnSubmit(store)
    listbox.remove(store)
    db.submit()

edit->click:
    populateAndEdit(listbox.selectedItem)

save->click:
    parseAndSave(listbox.selectedItem)
    db.submit()
    disableTexts()

cancel->click:
    disableTexts()
Run Code Online (Sandbox Code Playgroud)

问题在于我如何确定我们是在插入新商店还是更新现有商店.

对我来说显而易见的解决方案是使其成为一个"模态"过程 - 也就是说,当我单击编辑时,我进入编辑模式,并且保存按钮的工作方式与我处于添加模式时不同.

我知道我可以使它更像MVC,但我并不认为这种简单的形式值得增加复杂性.我对winforms不是很有经验,所以我不确定我是否有正确的想法来解决这个问题.

有一个更好的方法吗?我想保持简单,但可用.

c# winforms

0
推荐指数
1
解决办法
218
查看次数